Add min fetcher for octoprint

This commit is contained in:
Sims
2024-12-15 01:15:58 +01:00
parent 2f1b0095b0
commit 6aa74633a8
3 changed files with 71 additions and 14 deletions

View File

@@ -177,7 +177,7 @@ bool OctoPrinter::fetch()
request_consecutive_fail_count = 0; request_consecutive_fail_count = 0;
JsonDocument doc; JsonDocument doc;
deserializeJson(doc, client.getStream()); deserializeJson(doc, client.getStream());
parse_printer_state(doc); parse_printer_status(doc);
doc.clear(); doc.clear();
configure_http_client(client2, "/api/job", true, 1000, printer_config); configure_http_client(client2, "/api/job", true, 1000, printer_config);
@@ -216,12 +216,56 @@ bool OctoPrinter::fetch()
PrinterDataMinimal OctoPrinter::fetch_min() PrinterDataMinimal OctoPrinter::fetch_min()
{ {
return {}; PrinterDataMinimal min = {};
min.success = true;
min.print_progress = 0;
min.power_devices = 0;
min.state = PrinterState::PrinterStateOffline;
{
HTTPClient client;
int http_code = 0;
configure_http_client(client, "/api/printer", true, 1000, printer_config);
int http_code = client.GET();
if (http_code == 200)
{
JsonDocument doc;
deserializeJson(doc, client.getStream());
min.state = parse_printer_state(doc);
}
else if (http_code == 409)
{
min.state = PrinterState::PrinterStateError;
return min;
}
else
{
return min;
}
}
{
HTTPClient client;
configure_http_client(client, "/api/job", true, 1000, printer_config);
if (client.GET() == 200)
{
JsonDocument doc;
deserializeJson(doc, client.getStream());
min.print_progress = parse_job_state_progress(doc);
}
else
{
min.state = PrinterState::PrinterStateError;
}
}
return min;
} }
void OctoPrinter::disconnect() void OctoPrinter::disconnect()
{ {
} }
const char* MACRO_AUTOLEVEL = "Auto-Level (G28+G29)"; const char* MACRO_AUTOLEVEL = "Auto-Level (G28+G29)";

View File

@@ -14,10 +14,12 @@ class OctoPrinter : public BasePrinter
bool no_printer = false; bool no_printer = false;
unsigned char request_consecutive_fail_count{}; unsigned char request_consecutive_fail_count{};
void parse_printer_state(JsonDocument& in); void parse_printer_status(JsonDocument& in);
PrinterState parse_printer_state(JsonDocument& in);
void parse_job_state(JsonDocument& in); void parse_job_state(JsonDocument& in);
float parse_job_state_progress(JsonDocument& in);
void parse_error(JsonDocument& in); void parse_error(JsonDocument& in);
void OctoPrinter::parse_file_list(JsonDocument &in, std::list<OctoFileSystemFile> &files, int fetch_limit); void parse_file_list(JsonDocument &in, std::list<OctoFileSystemFile> &files, int fetch_limit);
bool get_request(const char* endpoint, int timeout_ms = 1000); bool get_request(const char* endpoint, int timeout_ms = 1000);
void init_ui_panels(); void init_ui_panels();

View File

@@ -2,11 +2,9 @@
#include "octoprint_printer_integration.hpp" #include "octoprint_printer_integration.hpp"
#include <ArduinoJson.h> #include <ArduinoJson.h>
void OctoPrinter::parse_printer_state(JsonDocument& in) PrinterState OctoPrinter::parse_printer_state(JsonDocument& in)
{ {
auto flags = in["state"]["flags"]; auto flags = in["state"]["flags"];
auto text = in["state"]["text"];
bool cancelling = flags["cancelling"]; bool cancelling = flags["cancelling"];
bool closedOrError = flags["closedOrError"]; bool closedOrError = flags["closedOrError"];
bool error = flags["error"]; bool error = flags["error"];
@@ -21,25 +19,32 @@ void OctoPrinter::parse_printer_state(JsonDocument& in)
if (printing || resuming) if (printing || resuming)
{ {
printer_data.state = PrinterState::PrinterStatePrinting; return PrinterState::PrinterStatePrinting;
} }
else if (pausing || paused) else if (pausing || paused)
{ {
printer_data.state = PrinterState::PrinterStatePaused; return PrinterState::PrinterStatePaused;
} }
else if (cancelling || finishing || ready) else if (cancelling || finishing || ready)
{ {
printer_data.state = PrinterState::PrinterStateIdle; return PrinterState::PrinterStateIdle;
} }
else
return PrinterState::PrinterStateError;
}
void OctoPrinter::parse_printer_status(JsonDocument& in)
{
auto text = in["state"]["text"];
printer_data.state = parse_printer_state(in);
if (printer_data.state == PrinterState::PrinterStateError)
{ {
if (text != NULL && (printer_data.state_message == NULL || strcmp(printer_data.state_message, text))) if (text != NULL && (printer_data.state_message == NULL || strcmp(printer_data.state_message, text)))
{ {
printer_data.state_message = (char *)malloc(strlen(text) + 1); printer_data.state_message = (char *)malloc(strlen(text) + 1);
strcpy(printer_data.state_message, text); strcpy(printer_data.state_message, text);
} }
printer_data.state = PrinterState::PrinterStateError;
} }
auto temperature = in["temperature"]; auto temperature = in["temperature"];
@@ -88,6 +93,12 @@ void OctoPrinter::parse_job_state(JsonDocument& in)
printer_data.remaining_time_s = progress["printTimeLeft"]; printer_data.remaining_time_s = progress["printTimeLeft"];
} }
float OctoPrinter::parse_job_state_progress(JsonDocument& in)
{
float completion = in["progress"]["completion"];
return completion / 100;
}
void OctoPrinter::parse_error(JsonDocument& in) void OctoPrinter::parse_error(JsonDocument& in)
{ {
const char* error = in["error"]; const char* error = in["error"];