// SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include "Configuration.h" #include #include #include #include class WebApiWsLiveClass { public: WebApiWsLiveClass(); void init(AsyncWebServer& server, Scheduler& scheduler); private: static void generateInverterCommonJsonResponse(JsonObject& root, std::shared_ptr inv); static void generateInverterChannelJsonResponse(JsonObject& root, std::shared_ptr inv); static void generateCommonJsonResponse(JsonVariant& root); static void addField(JsonObject& root, std::shared_ptr inv, const ChannelType_t type, const ChannelNum_t channel, const FieldId_t fieldId, String topic = ""); static void addTotalField(JsonObject& root, const String& name, const float value, const String& unit, const uint8_t digits); void onLivedataStatus(AsyncWebServerRequest* request); void onWebsocketEvent(AsyncWebSocket* server, AsyncWebSocketClient* client, AwsEventType type, void* arg, uint8_t* data, size_t len); AsyncWebSocket _ws; uint32_t _lastPublishStats[INV_MAX_COUNT] = { 0 }; std::mutex _mutex; Task _wsCleanupTask; void wsCleanupTaskCb(); Task _sendDataTask; void sendDataTaskCb(); };