diff --git a/include/Display_Graphic_Diagram.h b/include/Display_Graphic_Diagram.h index 26cacc3726..6da099ab75 100644 --- a/include/Display_Graphic_Diagram.h +++ b/include/Display_Graphic_Diagram.h @@ -16,12 +16,14 @@ class DisplayGraphicDiagramClass { void updatePeriod(); + const std::array& getGraphValues() const; + uint8_t getGraphValuesCount() const; + uint32_t getSecondsPerDot() const; + private: void averageLoop(); void dataPointLoop(); - uint32_t getSecondsPerDot(); - Task _averageTask; Task _dataPointTask; diff --git a/include/WebApi.h b/include/WebApi.h index 61f652cabb..8a2e8fcf37 100644 --- a/include/WebApi.h +++ b/include/WebApi.h @@ -3,6 +3,7 @@ #include "WebApi_device.h" #include "WebApi_devinfo.h" +#include "WebApi_display.h" #include "WebApi_dtu.h" #include "WebApi_errors.h" #include "WebApi_eventlog.h" @@ -50,6 +51,7 @@ class WebApiClass { WebApiDeviceClass _webApiDevice; WebApiDevInfoClass _webApiDevInfo; + WebApiDisplayClass _webApiDisplay; WebApiDtuClass _webApiDtu; WebApiEventlogClass _webApiEventlog; WebApiFileClass _webApiFile; diff --git a/include/WebApi_display.h b/include/WebApi_display.h new file mode 100644 index 0000000000..d5f7ac8e7e --- /dev/null +++ b/include/WebApi_display.h @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#include +#include + +class WebApiDisplayClass { +public: + void init(AsyncWebServer& server, Scheduler& scheduler); + +private: + void onDisplayHistory(AsyncWebServerRequest* request); +}; diff --git a/src/Display_Graphic_Diagram.cpp b/src/Display_Graphic_Diagram.cpp index 64e939962a..0f7a588bfe 100644 --- a/src/Display_Graphic_Diagram.cpp +++ b/src/Display_Graphic_Diagram.cpp @@ -47,7 +47,17 @@ void DisplayGraphicDiagramClass::dataPointLoop() } } -uint32_t DisplayGraphicDiagramClass::getSecondsPerDot() +const std::array& DisplayGraphicDiagramClass::getGraphValues() const +{ + return _graphValues; +} + +uint8_t DisplayGraphicDiagramClass::getGraphValuesCount() const +{ + return _graphValuesCount; +} + +uint32_t DisplayGraphicDiagramClass::getSecondsPerDot() const { return Configuration.get().Display.Diagram.Duration / _chartWidth; } diff --git a/src/WebApi.cpp b/src/WebApi.cpp index 04c73c2695..79a0f515f0 100644 --- a/src/WebApi.cpp +++ b/src/WebApi.cpp @@ -19,6 +19,7 @@ void WebApiClass::init(Scheduler& scheduler) { _webApiDevice.init(_server, scheduler); _webApiDevInfo.init(_server, scheduler); + _webApiDisplay.init(_server, scheduler); _webApiDtu.init(_server, scheduler); _webApiEventlog.init(_server, scheduler); _webApiFile.init(_server, scheduler); diff --git a/src/WebApi_display.cpp b/src/WebApi_display.cpp new file mode 100644 index 0000000000..33e56787f0 --- /dev/null +++ b/src/WebApi_display.cpp @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (C) 2022-2026 Thomas Basler and others + */ +#include "WebApi_display.h" +#include "Display_Graphic.h" +#include "WebApi.h" +#include + +void WebApiDisplayClass::init(AsyncWebServer& server, Scheduler& scheduler) +{ + using std::placeholders::_1; + + server.on("/api/display/history", HTTP_GET, static_cast(std::bind(&WebApiDisplayClass::onDisplayHistory, this, _1))); +} + +void WebApiDisplayClass::onDisplayHistory(AsyncWebServerRequest* request) +{ + if (!WebApi.checkCredentialsReadonly(request)) { + return; + } + + AsyncJsonResponse* response = new AsyncJsonResponse(); + auto& root = response->getRoot(); + + JsonArray values = root["values"].to(); + const auto& graphValues = Display.Diagram().getGraphValues(); + const uint8_t graphValuesCount = Display.Diagram().getGraphValuesCount(); + for (uint8_t i = 0; i < graphValuesCount; i++) { + values.add(graphValues[i]); + } + + root["values_count"] = graphValuesCount; + root["seconds_per_dot"] = Display.Diagram().getSecondsPerDot(); + + WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__); +}