Implemented WebAPI to get status of last power command

This commit is contained in:
Thomas Basler 2022-10-04 18:48:21 +02:00
parent 14bad84031
commit 3816320f1e
2 changed files with 34 additions and 0 deletions

View File

@ -9,6 +9,7 @@ public:
void loop(); void loop();
private: private:
void onPowerStatus(AsyncWebServerRequest* request);
void onPowerPost(AsyncWebServerRequest* request); void onPowerPost(AsyncWebServerRequest* request);
AsyncWebServer* _server; AsyncWebServer* _server;

View File

@ -13,6 +13,7 @@ void WebApiPowerClass::init(AsyncWebServer* server)
_server = 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)); _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) void WebApiPowerClass::onPowerPost(AsyncWebServerRequest* request)
{ {
AsyncJsonResponse* response = new AsyncJsonResponse(); AsyncJsonResponse* response = new AsyncJsonResponse();