From 045605b9f2bfa81e9b4af4b294d98b534a22cd5c Mon Sep 17 00:00:00 2001 From: victor7376 <74020611+victor7376@users.noreply.github.com> Date: Sat, 13 Mar 2021 12:31:06 +0000 Subject: [PATCH] Added Layer & End time Info Added in Current Layer & Estimated End time (Clock) for print. --- printermonitor/OctoPrintClient.cpp | 34 ++++++++++++++++++++++++++++++ printermonitor/OctoPrintClient.h | 4 ++++ printermonitor/printermonitor.ino | 33 ++++++++++++++++++++++++++++- 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/printermonitor/OctoPrintClient.cpp b/printermonitor/OctoPrintClient.cpp index 832835b..f68fd4b 100644 --- a/printermonitor/OctoPrintClient.cpp +++ b/printermonitor/OctoPrintClient.cpp @@ -244,6 +244,30 @@ void OctoPrintClient::getPrinterJobResults() { printerData.bedTemp = (const char*)root2["temperature"]["bed"]["actual"]; printerData.bedTargetTemp = (const char*)root2["temperature"]["bed"]["target"]; + // Layer & Endtime + apiGetData = "GET /plugin/DisplayLayerProgress/values HTTP/1.1"; + printClient = getSubmitRequest(apiGetData); + if (printerData.error != "") { + return; + } + const size_t bufferSize3 = JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(6) + JSON_OBJECT_SIZE(7) + JSON_OBJECT_SIZE(10) + 550; + DynamicJsonBuffer jsonBuffer3(bufferSize3); + + // Parse JSON object + JsonObject& root3 = jsonBuffer3.parseObject(printClient); + if (!root3.success()) { + // printerData.isPrinting = false; + printerData.estimatedEndTime = ""; + printerData.currentLayer = ""; + // printerData.bedTemp = ""; + // printerData.bedTargetTemp = (const char*)root2["temperature"]["bed"]["target"]; + return; + } + + printerData.estimatedEndTime = (const char*)root3["print"]["estimatedEndTime"]; + printerData.currentLayer = (const char*)root3["layer"]["current"]; + + if (isPrinting()) { Serial.println("Status: " + printerData.state + " " + printerData.fileName + "(" + printerData.progressCompletion + "%)"); } @@ -305,6 +329,16 @@ void OctoPrintClient::resetPrintData() { printerData.isPrinting = false; printerData.isPSUoff = false; printerData.error = ""; + printerData.currentLayer = ""; + printerData.estimatedEndTime = ""; +} + +String OctoPrintClient::getCurrentLayer(){ + return printerData.currentLayer; +} + +String OctoPrintClient::getEstimatedEndTime(){ + return printerData.estimatedEndTime; } String OctoPrintClient::getAveragePrintTime(){ diff --git a/printermonitor/OctoPrintClient.h b/printermonitor/OctoPrintClient.h index 1761ccc..daca713 100644 --- a/printermonitor/OctoPrintClient.h +++ b/printermonitor/OctoPrintClient.h @@ -59,6 +59,8 @@ private: String state; String toolTemp; String toolTargetTemp; + String currentLayer; + String estimatedEndTime; String filamentLength; String bedTemp; String bedTargetTemp; @@ -95,6 +97,8 @@ public: String getTempToolActual(); String getTempToolTarget(); String getFilamentLength(); + String getEstimatedEndTime(); + String getCurrentLayer(); String getValueRounded(String value); String getError(); String getPrinterType(); diff --git a/printermonitor/printermonitor.ino b/printermonitor/printermonitor.ino index 8849850..a6e1e98 100644 --- a/printermonitor/printermonitor.ino +++ b/printermonitor/printermonitor.ino @@ -59,13 +59,15 @@ void drawOtaProgress(unsigned int, unsigned int); void drawScreen1(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y); void drawScreen2(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y); void drawScreen3(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y); +void drawScreen4(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y); +void drawScreen5(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y); void drawHeaderOverlay(OLEDDisplay *display, OLEDDisplayUiState* state); void drawClock(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y); void drawWeather(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y); void drawClockHeaderOverlay(OLEDDisplay *display, OLEDDisplayUiState* state); // Set the number of Frames supported -const int numberOfFrames = 3; +const int numberOfFrames = 5; FrameCallback frames[numberOfFrames]; FrameCallback clockFrame[2]; boolean isClockOn = false; @@ -259,6 +261,8 @@ void setup() { frames[0] = drawScreen1; frames[1] = drawScreen2; frames[2] = drawScreen3; + frames[3] = drawScreen4; + frames[4] = drawScreen5; clockFrame[0] = drawClock; clockFrame[1] = drawWeather; ui.setOverlays(overlays, numberOfOverlays); @@ -963,6 +967,33 @@ void drawScreen3(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int display->drawString(64 + x, 14 + y, time); } +void drawScreen4(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) { + + String layer = printerClient.getCurrentLayer(); + display->setTextAlignment(TEXT_ALIGN_CENTER); + display->setFont(ArialMT_Plain_16); + + display->drawString(64 + x, 0 + y, "Layer"); + //display->setTextAlignment(TEXT_ALIGN_LEFT); + display->setFont(ArialMT_Plain_24); + + display->drawString(64 + x, 14 + y, layer); +} + + +void drawScreen5(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) { + + String EstimatedEnd = printerClient.getEstimatedEndTime(); + display->setTextAlignment(TEXT_ALIGN_CENTER); + display->setFont(ArialMT_Plain_16); + + display->drawString(64 + x, 0 + y, "End Time"); + //display->setTextAlignment(TEXT_ALIGN_LEFT); + display->setFont(ArialMT_Plain_24); + + display->drawString(64 + x, 14 + y, EstimatedEnd); +} + void drawClock(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) { display->setTextAlignment(TEXT_ALIGN_CENTER);