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