Migrate WebApi loop() methods to scheduler tasks
This commit is contained in:
parent
e66060e769
commit
251d197fb6
@ -38,10 +38,6 @@ public:
|
||||
static void writeConfig(JsonVariant& retMsg, const WebApiError code = WebApiError::GenericSuccess, const String& message = "Settings saved!");
|
||||
|
||||
private:
|
||||
void loop();
|
||||
|
||||
Task _loopTask;
|
||||
|
||||
AsyncWebServer _server;
|
||||
|
||||
WebApiConfigClass _webApiConfig;
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiConfigClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onConfigGet(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiDeviceClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onDeviceAdminGet(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiDevInfoClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onDevInfoStatus(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,16 +2,18 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiDtuClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onDtuAdminGet(AsyncWebServerRequest* request);
|
||||
void onDtuAdminPost(AsyncWebServerRequest* request);
|
||||
|
||||
AsyncWebServer* _server;
|
||||
bool _performReload = false;
|
||||
|
||||
Task _applyDataTask;
|
||||
void applyDataTaskCb();
|
||||
};
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiEventlogClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onEventlogStatus(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiFirmwareClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onFirmwareUpdateFinish(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiGridProfileClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onGridProfileStatus(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiInverterClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onInverterList(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiLimitClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onLimitStatus(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiMaintenanceClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onRebootPost(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,13 +2,13 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
#define MQTT_JSON_DOC_SIZE 10240
|
||||
|
||||
class WebApiMqttClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onMqttStatus(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiNetworkClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onNetworkStatus(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiNtpClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onNtpStatus(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiPowerClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onPowerStatus(AsyncWebServerRequest* request);
|
||||
|
||||
@ -3,12 +3,12 @@
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <Hoymiles.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
#include <map>
|
||||
|
||||
class WebApiPrometheusClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onPrometheusMetricsGet(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiSecurityClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onSecurityGet(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiSysstatusClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void onSystemStatus(AsyncWebServerRequest* request);
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiWebappClass {
|
||||
public:
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
AsyncWebServer* _server;
|
||||
|
||||
@ -2,16 +2,17 @@
|
||||
#pragma once
|
||||
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiWsConsoleClass {
|
||||
public:
|
||||
WebApiWsConsoleClass();
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
AsyncWebServer* _server;
|
||||
AsyncWebSocket _ws;
|
||||
|
||||
uint32_t _lastWsCleanup = 0;
|
||||
Task _wsCleanupTask;
|
||||
void wsCleanupTaskCb();
|
||||
};
|
||||
@ -4,12 +4,12 @@
|
||||
#include <ArduinoJson.h>
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <Hoymiles.h>
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
|
||||
class WebApiWsLiveClass {
|
||||
public:
|
||||
WebApiWsLiveClass();
|
||||
void init(AsyncWebServer& server);
|
||||
void loop();
|
||||
void init(AsyncWebServer& server, Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void generateJsonResponse(JsonVariant& root);
|
||||
@ -22,9 +22,13 @@ private:
|
||||
AsyncWebSocket _ws;
|
||||
|
||||
uint32_t _lastWsPublish = 0;
|
||||
uint32_t _lastInvUpdateCheck = 0;
|
||||
uint32_t _lastWsCleanup = 0;
|
||||
uint32_t _newestInverterTimestamp = 0;
|
||||
|
||||
std::mutex _mutex;
|
||||
|
||||
Task _wsCleanupTask;
|
||||
void wsCleanupTaskCb();
|
||||
|
||||
Task _sendDataTask;
|
||||
void sendDataTaskCb();
|
||||
};
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi.h"
|
||||
#include "Configuration.h"
|
||||
@ -14,56 +14,28 @@ WebApiClass::WebApiClass()
|
||||
|
||||
void WebApiClass::init(Scheduler& scheduler)
|
||||
{
|
||||
_webApiConfig.init(_server);
|
||||
_webApiDevice.init(_server);
|
||||
_webApiDevInfo.init(_server);
|
||||
_webApiDtu.init(_server);
|
||||
_webApiEventlog.init(_server);
|
||||
_webApiFirmware.init(_server);
|
||||
_webApiGridprofile.init(_server);
|
||||
_webApiInverter.init(_server);
|
||||
_webApiLimit.init(_server);
|
||||
_webApiMaintenance.init(_server);
|
||||
_webApiMqtt.init(_server);
|
||||
_webApiNetwork.init(_server);
|
||||
_webApiNtp.init(_server);
|
||||
_webApiPower.init(_server);
|
||||
_webApiPrometheus.init(_server);
|
||||
_webApiSecurity.init(_server);
|
||||
_webApiSysstatus.init(_server);
|
||||
_webApiWebapp.init(_server);
|
||||
_webApiWsConsole.init(_server);
|
||||
_webApiWsLive.init(_server);
|
||||
_webApiConfig.init(_server, scheduler);
|
||||
_webApiDevice.init(_server, scheduler);
|
||||
_webApiDevInfo.init(_server, scheduler);
|
||||
_webApiDtu.init(_server, scheduler);
|
||||
_webApiEventlog.init(_server, scheduler);
|
||||
_webApiFirmware.init(_server, scheduler);
|
||||
_webApiGridprofile.init(_server, scheduler);
|
||||
_webApiInverter.init(_server, scheduler);
|
||||
_webApiLimit.init(_server, scheduler);
|
||||
_webApiMaintenance.init(_server, scheduler);
|
||||
_webApiMqtt.init(_server, scheduler);
|
||||
_webApiNetwork.init(_server, scheduler);
|
||||
_webApiNtp.init(_server, scheduler);
|
||||
_webApiPower.init(_server, scheduler);
|
||||
_webApiPrometheus.init(_server, scheduler);
|
||||
_webApiSecurity.init(_server, scheduler);
|
||||
_webApiSysstatus.init(_server, scheduler);
|
||||
_webApiWebapp.init(_server, scheduler);
|
||||
_webApiWsConsole.init(_server, scheduler);
|
||||
_webApiWsLive.init(_server, scheduler);
|
||||
|
||||
_server.begin();
|
||||
|
||||
scheduler.addTask(_loopTask);
|
||||
_loopTask.setCallback(std::bind(&WebApiClass::loop, this));
|
||||
_loopTask.setIterations(TASK_FOREVER);
|
||||
_loopTask.enable();
|
||||
}
|
||||
|
||||
void WebApiClass::loop()
|
||||
{
|
||||
_webApiConfig.loop();
|
||||
_webApiDevice.loop();
|
||||
_webApiDevInfo.loop();
|
||||
_webApiDtu.loop();
|
||||
_webApiEventlog.loop();
|
||||
_webApiFirmware.loop();
|
||||
_webApiGridprofile.loop();
|
||||
_webApiInverter.loop();
|
||||
_webApiLimit.loop();
|
||||
_webApiMaintenance.loop();
|
||||
_webApiMqtt.loop();
|
||||
_webApiNetwork.loop();
|
||||
_webApiNtp.loop();
|
||||
_webApiPower.loop();
|
||||
_webApiSecurity.loop();
|
||||
_webApiSysstatus.loop();
|
||||
_webApiWebapp.loop();
|
||||
_webApiWsConsole.loop();
|
||||
_webApiWsLive.loop();
|
||||
}
|
||||
|
||||
bool WebApiClass::checkCredentials(AsyncWebServerRequest* request)
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_config.h"
|
||||
#include "Configuration.h"
|
||||
@ -10,7 +10,7 @@
|
||||
#include <AsyncJson.h>
|
||||
#include <LittleFS.h>
|
||||
|
||||
void WebApiConfigClass::init(AsyncWebServer& server)
|
||||
void WebApiConfigClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
using std::placeholders::_2;
|
||||
@ -29,10 +29,6 @@ void WebApiConfigClass::init(AsyncWebServer& server)
|
||||
std::bind(&WebApiConfigClass::onConfigUpload, this, _1, _2, _3, _4, _5, _6));
|
||||
}
|
||||
|
||||
void WebApiConfigClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiConfigClass::onConfigGet(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentials(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_device.h"
|
||||
#include "Configuration.h"
|
||||
@ -12,7 +12,7 @@
|
||||
#include "helper.h"
|
||||
#include <AsyncJson.h>
|
||||
|
||||
void WebApiDeviceClass::init(AsyncWebServer& server)
|
||||
void WebApiDeviceClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -22,10 +22,6 @@ void WebApiDeviceClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/device/config", HTTP_POST, std::bind(&WebApiDeviceClass::onDeviceAdminPost, this, _1));
|
||||
}
|
||||
|
||||
void WebApiDeviceClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiDeviceClass::onDeviceAdminGet(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentials(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_devinfo.h"
|
||||
#include "WebApi.h"
|
||||
@ -8,7 +8,7 @@
|
||||
#include <Hoymiles.h>
|
||||
#include <ctime>
|
||||
|
||||
void WebApiDevInfoClass::init(AsyncWebServer& server)
|
||||
void WebApiDevInfoClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -17,10 +17,6 @@ void WebApiDevInfoClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/devinfo/status", HTTP_GET, std::bind(&WebApiDevInfoClass::onDevInfoStatus, this, _1));
|
||||
}
|
||||
|
||||
void WebApiDevInfoClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiDevInfoClass::onDevInfoStatus(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentialsReadonly(request)) {
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
#include <AsyncJson.h>
|
||||
#include <Hoymiles.h>
|
||||
|
||||
void WebApiDtuClass::init(AsyncWebServer& server)
|
||||
void WebApiDtuClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -17,11 +17,14 @@ void WebApiDtuClass::init(AsyncWebServer& server)
|
||||
|
||||
_server->on("/api/dtu/config", HTTP_GET, std::bind(&WebApiDtuClass::onDtuAdminGet, this, _1));
|
||||
_server->on("/api/dtu/config", HTTP_POST, std::bind(&WebApiDtuClass::onDtuAdminPost, this, _1));
|
||||
|
||||
scheduler.addTask(_applyDataTask);
|
||||
_applyDataTask.setCallback(std::bind(&WebApiDtuClass::applyDataTaskCb, this));
|
||||
_applyDataTask.setIterations(TASK_ONCE);
|
||||
}
|
||||
|
||||
void WebApiDtuClass::loop()
|
||||
void WebApiDtuClass::applyDataTaskCb()
|
||||
{
|
||||
if (_performReload) {
|
||||
// Execute stuff in main thread to avoid busy SPI bus
|
||||
CONFIG_T& config = Configuration.get();
|
||||
Hoymiles.getRadioNrf()->setPALevel((rf24_pa_dbm_e)config.Dtu.Nrf.PaLevel);
|
||||
@ -31,8 +34,6 @@ void WebApiDtuClass::loop()
|
||||
Hoymiles.getRadioCmt()->setCountryMode(static_cast<CountryModeId_t>(config.Dtu.Cmt.CountryMode));
|
||||
Hoymiles.getRadioCmt()->setInverterTargetFrequency(config.Dtu.Cmt.Frequency);
|
||||
Hoymiles.setPollInterval(config.Dtu.PollInterval);
|
||||
_performReload = false;
|
||||
}
|
||||
}
|
||||
|
||||
void WebApiDtuClass::onDtuAdminGet(AsyncWebServerRequest* request)
|
||||
@ -196,5 +197,5 @@ void WebApiDtuClass::onDtuAdminPost(AsyncWebServerRequest* request)
|
||||
response->setLength();
|
||||
request->send(response);
|
||||
|
||||
_performReload = true;
|
||||
_applyDataTask.enable();
|
||||
}
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_eventlog.h"
|
||||
#include "WebApi.h"
|
||||
#include <AsyncJson.h>
|
||||
#include <Hoymiles.h>
|
||||
|
||||
void WebApiEventlogClass::init(AsyncWebServer& server)
|
||||
void WebApiEventlogClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -16,10 +16,6 @@ void WebApiEventlogClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/eventlog/status", HTTP_GET, std::bind(&WebApiEventlogClass::onEventlogStatus, this, _1));
|
||||
}
|
||||
|
||||
void WebApiEventlogClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiEventlogClass::onEventlogStatus(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentialsReadonly(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_firmware.h"
|
||||
#include "Configuration.h"
|
||||
@ -10,7 +10,7 @@
|
||||
#include "helper.h"
|
||||
#include <AsyncJson.h>
|
||||
|
||||
void WebApiFirmwareClass::init(AsyncWebServer& server)
|
||||
void WebApiFirmwareClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
using std::placeholders::_2;
|
||||
@ -26,10 +26,6 @@ void WebApiFirmwareClass::init(AsyncWebServer& server)
|
||||
std::bind(&WebApiFirmwareClass::onFirmwareUpdateUpload, this, _1, _2, _3, _4, _5, _6));
|
||||
}
|
||||
|
||||
void WebApiFirmwareClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiFirmwareClass::onFirmwareUpdateFinish(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentials(request)) {
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_gridprofile.h"
|
||||
#include "WebApi.h"
|
||||
#include <AsyncJson.h>
|
||||
#include <Hoymiles.h>
|
||||
|
||||
void WebApiGridProfileClass::init(AsyncWebServer& server)
|
||||
void WebApiGridProfileClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -17,10 +17,6 @@ void WebApiGridProfileClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/gridprofile/rawdata", HTTP_GET, std::bind(&WebApiGridProfileClass::onGridProfileRawdata, this, _1));
|
||||
}
|
||||
|
||||
void WebApiGridProfileClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiGridProfileClass::onGridProfileStatus(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentialsReadonly(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_inverter.h"
|
||||
#include "Configuration.h"
|
||||
@ -12,7 +12,7 @@
|
||||
#include <AsyncJson.h>
|
||||
#include <Hoymiles.h>
|
||||
|
||||
void WebApiInverterClass::init(AsyncWebServer& server)
|
||||
void WebApiInverterClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -25,10 +25,6 @@ void WebApiInverterClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/inverter/order", HTTP_POST, std::bind(&WebApiInverterClass::onInverterOrder, this, _1));
|
||||
}
|
||||
|
||||
void WebApiInverterClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiInverterClass::onInverterList(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentials(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_limit.h"
|
||||
#include "WebApi.h"
|
||||
@ -10,7 +10,7 @@
|
||||
#include <AsyncJson.h>
|
||||
#include <Hoymiles.h>
|
||||
|
||||
void WebApiLimitClass::init(AsyncWebServer& server)
|
||||
void WebApiLimitClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -20,10 +20,6 @@ void WebApiLimitClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/limit/config", HTTP_POST, std::bind(&WebApiLimitClass::onLimitPost, this, _1));
|
||||
}
|
||||
|
||||
void WebApiLimitClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiLimitClass::onLimitStatus(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentialsReadonly(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
|
||||
#include "WebApi_maintenance.h"
|
||||
@ -9,7 +9,7 @@
|
||||
#include "WebApi_errors.h"
|
||||
#include <AsyncJson.h>
|
||||
|
||||
void WebApiMaintenanceClass::init(AsyncWebServer& server)
|
||||
void WebApiMaintenanceClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -18,10 +18,6 @@ void WebApiMaintenanceClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/maintenance/reboot", HTTP_POST, std::bind(&WebApiMaintenanceClass::onRebootPost, this, _1));
|
||||
}
|
||||
|
||||
void WebApiMaintenanceClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiMaintenanceClass::onRebootPost(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentials(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_mqtt.h"
|
||||
#include "Configuration.h"
|
||||
@ -11,7 +11,7 @@
|
||||
#include "helper.h"
|
||||
#include <AsyncJson.h>
|
||||
|
||||
void WebApiMqttClass::init(AsyncWebServer& server)
|
||||
void WebApiMqttClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -22,10 +22,6 @@ void WebApiMqttClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/mqtt/config", HTTP_POST, std::bind(&WebApiMqttClass::onMqttAdminPost, this, _1));
|
||||
}
|
||||
|
||||
void WebApiMqttClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiMqttClass::onMqttStatus(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentialsReadonly(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_network.h"
|
||||
#include "Configuration.h"
|
||||
@ -10,7 +10,7 @@
|
||||
#include "helper.h"
|
||||
#include <AsyncJson.h>
|
||||
|
||||
void WebApiNetworkClass::init(AsyncWebServer& server)
|
||||
void WebApiNetworkClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -21,10 +21,6 @@ void WebApiNetworkClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/network/config", HTTP_POST, std::bind(&WebApiNetworkClass::onNetworkAdminPost, this, _1));
|
||||
}
|
||||
|
||||
void WebApiNetworkClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiNetworkClass::onNetworkStatus(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentialsReadonly(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_ntp.h"
|
||||
#include "Configuration.h"
|
||||
@ -11,7 +11,7 @@
|
||||
#include "helper.h"
|
||||
#include <AsyncJson.h>
|
||||
|
||||
void WebApiNtpClass::init(AsyncWebServer& server)
|
||||
void WebApiNtpClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -24,10 +24,6 @@ void WebApiNtpClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/ntp/time", HTTP_POST, std::bind(&WebApiNtpClass::onNtpTimePost, this, _1));
|
||||
}
|
||||
|
||||
void WebApiNtpClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiNtpClass::onNtpStatus(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentialsReadonly(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_power.h"
|
||||
#include "WebApi.h"
|
||||
@ -8,7 +8,7 @@
|
||||
#include <AsyncJson.h>
|
||||
#include <Hoymiles.h>
|
||||
|
||||
void WebApiPowerClass::init(AsyncWebServer& server)
|
||||
void WebApiPowerClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -18,10 +18,6 @@ void WebApiPowerClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/power/config", HTTP_POST, std::bind(&WebApiPowerClass::onPowerPost, this, _1));
|
||||
}
|
||||
|
||||
void WebApiPowerClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiPowerClass::onPowerStatus(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentialsReadonly(request)) {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_prometheus.h"
|
||||
#include "Configuration.h"
|
||||
@ -10,7 +10,7 @@
|
||||
#include "WebApi.h"
|
||||
#include <Hoymiles.h>
|
||||
|
||||
void WebApiPrometheusClass::init(AsyncWebServer& server)
|
||||
void WebApiPrometheusClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -19,10 +19,6 @@ void WebApiPrometheusClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/prometheus/metrics", HTTP_GET, std::bind(&WebApiPrometheusClass::onPrometheusMetricsGet, this, _1));
|
||||
}
|
||||
|
||||
void WebApiPrometheusClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiPrometheusClass::onPrometheusMetricsGet(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentialsReadonly(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_security.h"
|
||||
#include "Configuration.h"
|
||||
@ -9,7 +9,7 @@
|
||||
#include "helper.h"
|
||||
#include <AsyncJson.h>
|
||||
|
||||
void WebApiSecurityClass::init(AsyncWebServer& server)
|
||||
void WebApiSecurityClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -20,10 +20,6 @@ void WebApiSecurityClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/security/authenticate", HTTP_GET, std::bind(&WebApiSecurityClass::onAuthenticateGet, this, _1));
|
||||
}
|
||||
|
||||
void WebApiSecurityClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiSecurityClass::onSecurityGet(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentials(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_sysstatus.h"
|
||||
#include "Configuration.h"
|
||||
@ -16,7 +16,7 @@
|
||||
#define AUTO_GIT_HASH ""
|
||||
#endif
|
||||
|
||||
void WebApiSysstatusClass::init(AsyncWebServer& server)
|
||||
void WebApiSysstatusClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
|
||||
@ -25,10 +25,6 @@ void WebApiSysstatusClass::init(AsyncWebServer& server)
|
||||
_server->on("/api/system/status", HTTP_GET, std::bind(&WebApiSysstatusClass::onSystemStatus, this, _1));
|
||||
}
|
||||
|
||||
void WebApiSysstatusClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiSysstatusClass::onSystemStatus(AsyncWebServerRequest* request)
|
||||
{
|
||||
if (!WebApi.checkCredentialsReadonly(request)) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_webapp.h"
|
||||
|
||||
@ -22,7 +22,7 @@ extern const uint8_t file_site_webmanifest_end[] asm("_binary_webapp_dist_site_w
|
||||
#define ETAG_HTTP_HEADER_VAL "\"" AUTO_GIT_HASH "\"" // ETag value must be between quotes
|
||||
#endif
|
||||
|
||||
void WebApiWebappClass::init(AsyncWebServer& server)
|
||||
void WebApiWebappClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
_server = &server;
|
||||
|
||||
@ -94,7 +94,3 @@ void WebApiWebappClass::init(AsyncWebServer& server)
|
||||
request->send(response);
|
||||
});
|
||||
}
|
||||
|
||||
void WebApiWebappClass::loop()
|
||||
{
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_ws_console.h"
|
||||
#include "Configuration.h"
|
||||
@ -13,17 +13,22 @@ WebApiWsConsoleClass::WebApiWsConsoleClass()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiWsConsoleClass::init(AsyncWebServer& server)
|
||||
void WebApiWsConsoleClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
_server = &server;
|
||||
_server->addHandler(&_ws);
|
||||
MessageOutput.register_ws_output(&_ws);
|
||||
|
||||
scheduler.addTask(_wsCleanupTask);
|
||||
_wsCleanupTask.setCallback(std::bind(&WebApiWsConsoleClass::wsCleanupTaskCb, this));
|
||||
_wsCleanupTask.setIterations(TASK_FOREVER);
|
||||
_wsCleanupTask.setInterval(1 * TASK_SECOND);
|
||||
_wsCleanupTask.enable();
|
||||
}
|
||||
|
||||
void WebApiWsConsoleClass::loop()
|
||||
void WebApiWsConsoleClass::wsCleanupTaskCb()
|
||||
{
|
||||
// see: https://github.com/me-no-dev/ESPAsyncWebServer#limiting-the-number-of-web-socket-clients
|
||||
if (millis() - _lastWsCleanup > 1000) {
|
||||
_ws.cleanupClients();
|
||||
|
||||
if (Configuration.get().Security.AllowReadonly) {
|
||||
@ -31,7 +36,4 @@ void WebApiWsConsoleClass::loop()
|
||||
} else {
|
||||
_ws.setAuthentication(AUTH_USERNAME, Configuration.get().Security.Password);
|
||||
}
|
||||
|
||||
_lastWsCleanup = millis();
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Thomas Basler and others
|
||||
* Copyright (C) 2022-2024 Thomas Basler and others
|
||||
*/
|
||||
#include "WebApi_ws_live.h"
|
||||
#include "Configuration.h"
|
||||
@ -16,7 +16,7 @@ WebApiWsLiveClass::WebApiWsLiveClass()
|
||||
{
|
||||
}
|
||||
|
||||
void WebApiWsLiveClass::init(AsyncWebServer& server)
|
||||
void WebApiWsLiveClass::init(AsyncWebServer& server, Scheduler& scheduler)
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
using std::placeholders::_2;
|
||||
@ -30,26 +30,33 @@ void WebApiWsLiveClass::init(AsyncWebServer& server)
|
||||
|
||||
_server->addHandler(&_ws);
|
||||
_ws.onEvent(std::bind(&WebApiWsLiveClass::onWebsocketEvent, this, _1, _2, _3, _4, _5, _6));
|
||||
|
||||
scheduler.addTask(_wsCleanupTask);
|
||||
_wsCleanupTask.setCallback(std::bind(&WebApiWsLiveClass::wsCleanupTaskCb, this));
|
||||
_wsCleanupTask.setIterations(TASK_FOREVER);
|
||||
_wsCleanupTask.setInterval(1 * TASK_SECOND);
|
||||
_wsCleanupTask.enable();
|
||||
|
||||
scheduler.addTask(_sendDataTask);
|
||||
_sendDataTask.setCallback(std::bind(&WebApiWsLiveClass::sendDataTaskCb, this));
|
||||
_sendDataTask.setIterations(TASK_FOREVER);
|
||||
_sendDataTask.setInterval(1 * TASK_SECOND);
|
||||
_sendDataTask.enable();
|
||||
}
|
||||
|
||||
void WebApiWsLiveClass::loop()
|
||||
void WebApiWsLiveClass::wsCleanupTaskCb()
|
||||
{
|
||||
// see: https://github.com/me-no-dev/ESPAsyncWebServer#limiting-the-number-of-web-socket-clients
|
||||
if (millis() - _lastWsCleanup > 1000) {
|
||||
_ws.cleanupClients();
|
||||
_lastWsCleanup = millis();
|
||||
}
|
||||
|
||||
void WebApiWsLiveClass::sendDataTaskCb()
|
||||
{
|
||||
// do nothing if no WS client is connected
|
||||
if (_ws.count() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (millis() - _lastInvUpdateCheck < 1000) {
|
||||
return;
|
||||
}
|
||||
_lastInvUpdateCheck = millis();
|
||||
|
||||
uint32_t maxTimeStamp = 0;
|
||||
for (uint8_t i = 0; i < Hoymiles.getNumInverters(); i++) {
|
||||
auto inv = Hoymiles.getInverterByPos(i);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user