Fixed HTTP request to Repetier Server

pull/126/head
Daniel Glock 2020-12-29 17:43:54 +01:00
parent a9a0348efb
commit 44b9e00271
1 changed files with 54 additions and 60 deletions

View File

@ -24,6 +24,7 @@ SOFTWARE.
// Additional Contributions: // Additional Contributions:
/* 15 Jan 2019 : Owen Carter : Add psucontrol query via POST api call */ /* 15 Jan 2019 : Owen Carter : Add psucontrol query via POST api call */
/* 07 April 2019 : Jon Smith : Redesigned this class for Repetier Server */ /* 07 April 2019 : Jon Smith : Redesigned this class for Repetier Server */
/* 26 December 2020 : Daniel Glock : Changed connection to Repetier Server */
#include "RepetierClient.h" #include "RepetierClient.h"
@ -59,59 +60,36 @@ boolean RepetierClient::validate() {
return rtnValue; return rtnValue;
} }
WiFiClient RepetierClient::getSubmitRequest(String apiGetData) { String RepetierClient::getSubmitRequest(String apiGetData) {
WiFiClient printClient;
printClient.setTimeout(5000);
Serial.println("Getting Repetier Data via GET"); //Your Domain name with URL path or IP address with path
Serial.println(apiGetData); String serverName = "http://" + String(myServer) + ":" + String(myPort) + String(apiGetData);
result = ""; Serial.println("My Server request: " + String(serverName));
if (printClient.connect(myServer, myPort)) { //starts client connection, checks for connection HTTPClient printClient;
printClient.println(apiGetData);
printClient.println("Host: " + String(myServer) + ":" + String(myPort)); // Your IP address with path or Domain name with URL path
printClient.println("X-Api-Key: " + myApiKey); printClient.begin(serverName);
if (encodedAuth != "") {
printClient.print("Authorization: "); // Send HTTP POST request
printClient.println("Basic " + encodedAuth); int httpResponseCode = printClient.GET();
}
printClient.println("User-Agent: ArduinoWiFi/1.1"); String payload = "{}";
printClient.println("Connection: close");
if (printClient.println() == 0) { if (httpResponseCode>0) {
Serial.println("Connection to " + String(myServer) + ":" + String(myPort) + " failed."); Serial.print("HTTP Response code: ");
Serial.println(); Serial.println(httpResponseCode);
resetPrintData(); payload = printClient.getString();
printerData.error = "Connection to " + String(myServer) + ":" + String(myPort) + " failed."; Serial.println("My Payload: " + String(payload));
return printClient;
}
} }
else { else {
Serial.println("Connection to Repetier failed: " + String(myServer) + ":" + String(myPort)); //error message if no client connect Serial.print("Error code: ");
Serial.println(); Serial.println(httpResponseCode);
resetPrintData(); printerData.error = "Connection to " + String(myServer) + ":" + String(myPort) + " failed.";
printerData.error = "Connection to Repetier failed: " + String(myServer) + ":" + String(myPort);
return printClient;
}
/*
// Check HTTP status
char status[32] = {0};
printClient.readBytesUntil('\r', status, sizeof(status));
if (strcmp(status, "HTTP/1.1 200 OK") != 0) {
Serial.print(F("Unexpected response: "));
Serial.println(status);
printerData.state = "";
printerData.error = "Response: " + String(status);
return printClient;
} }
// Free resources
printClient.end();
// Skip HTTP headers return payload;
char endOfHeaders[] = "\r\n\r\n";
if (!printClient.find(endOfHeaders)) {
Serial.println(F("Invalid response"));
printerData.error = "Invalid response from " + String(myServer) + ":" + String(myPort);
printerData.state = "";
}
*/
return printClient;
} }
@ -120,35 +98,41 @@ void RepetierClient::getPrinterJobResults() {
return; return;
} }
//**** get the Printer Job status //**** get the Printer Job status
String apiGetData = "GET /printer/api/?a=listPrinter&apikey=" + myApiKey; String apiGetData = "/printer/api/?a=listPrinter&apikey=" + myApiKey;
WiFiClient printClient = getSubmitRequest(apiGetData); String payload = getSubmitRequest(apiGetData);
if (printerData.error != "") { if (printerData.error != "") {
Serial.println("Printer listPrinter not successful");
return; return;
} }
const size_t bufferSize = JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(3) + 2*JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(6) + 710; const size_t bufferSize = JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(3) + 2*JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(6) + 710;
DynamicJsonBuffer jsonBuffer(bufferSize); DynamicJsonBuffer jsonBuffer(bufferSize);
// Parse JSON object // Parse JSON object
JsonArray& root = jsonBuffer.parseArray(printClient);
JsonArray& root = jsonBuffer.parseArray(payload);
int countNew = root.size();
Serial.println("Size of root new: " + String(countNew));
root.printTo(Serial);
if (!root.success()) { if (!root.success()) {
printerData.error = "Repetier Data Parsing failed: " + String(myServer) + ":" + String(myPort); printerData.error = "Repetier Data Parsing failed - Printer Job status: " + String(myServer) + ":" + String(myPort);
Serial.println(printerData.error); Serial.println(printerData.error);
printerData.state = ""; printerData.state = "";
return; return;
} }
Serial.println("Check JSON file");
int inx = 0; int inx = 0;
int count = root.size(); int count = root.size();
Serial.println("Size of root: " + String(count)); Serial.println("Size of root: " + String(count));
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) { // Search Printer choice
Serial.println("Printer: " + String((const char*)root[i]["slug"])); Serial.println("Printer: " + String((const char*)root[i]["slug"]));
if (String((const char*)root[i]["slug"]) == printerData.printerName) { if (String((const char*)root[i]["slug"]) == printerData.printerName) {
inx = i; inx = i;
Serial.println("Printer found successfull in JSON");
break; break;
} }
} }
Serial.println("Write printer data to database"); // Serial.println("Printer stateList not successful");
JsonObject& pr = root[inx]; JsonObject& pr = root[inx];
//printerData.averagePrintTime = (const char*)pr[""]; //printerData.averagePrintTime = (const char*)pr[""];
@ -176,8 +160,10 @@ void RepetierClient::getPrinterJobResults() {
printerData.progressPrintTimeLeft = String(timeLeft); printerData.progressPrintTimeLeft = String(timeLeft);
if (printerData.fileName != "none") { if (printerData.fileName != "none") {
Serial.println("Printer prints");
printerData.isPrinting = true; printerData.isPrinting = true;
} else { } else {
Serial.println("Printer does not print);
printerData.isPrinting = false; printerData.isPrinting = false;
} }
@ -192,8 +178,15 @@ void RepetierClient::getPrinterJobResults() {
} }
//**** get the Printer Temps and Stat //**** get the Printer Temps and Stat
apiGetData = "GET /printer/api/?a=stateList&apikey=" + myApiKey; // Payload: {"Anycubic_i3_Mega_S":
printClient = getSubmitRequest(apiGetData); // {"activeExtruder":0,"debugLevel":6,"doorOpen":false,"extruder":[{"error":0,"output":47,"tempRead":204.60000610351562,"tempSet":205.00000000000000}],
// "fans":[{"on":true,"voltage":178}],"filterFan":false,"firmware":"Marlin","firmwareURL":"","flowMultiply":100,"hasXHome":true,"hasYHome":true,"hasZHome":false,
// "heatedBeds":[{"error":0,"output":33,"tempRead":80.000000000000000,"tempSet":80.000000000000000}],"heatedChambers":[],"layer":35,"lights":0,"numExtruder":1,"powerOn":false,"rec":true,
// "sdcardMounted":true,"shutdownAfterPrint":false,"speedMultiply":100,"volumetric":false,"x":106.80000305175781,"y":142.85899353027344,"z":6.8000001907348633}}
// 14:23:12.801 -> E
apiGetData = "/printer/api/?a=stateList&apikey=" + myApiKey;
//printClient = getSubmitRequest(apiGetData);
payload = getSubmitRequest(apiGetData);
if (printerData.error != "") { if (printerData.error != "") {
return; return;
} }
@ -201,12 +194,12 @@ void RepetierClient::getPrinterJobResults() {
DynamicJsonBuffer jsonBuffer2(bufferSize2); DynamicJsonBuffer jsonBuffer2(bufferSize2);
//Parse JSON object //Parse JSON object
JsonObject& root2 = jsonBuffer2.parseObject(printClient); JsonObject& root2 = jsonBuffer2.parseObject(payload);
//Select printer //Select printer
JsonObject& pr2 = root2[printerData.printerName]; JsonObject& pr2 = root2[printerData.printerName];
if (!root2.success()) { if (!root2.success()) {
Serial.println("Printer stateList not successful");
printerData.isPrinting = false; printerData.isPrinting = false;
printerData.toolTemp = ""; printerData.toolTemp = "";
printerData.toolTargetTemp = ""; printerData.toolTargetTemp = "";
@ -215,6 +208,7 @@ void RepetierClient::getPrinterJobResults() {
return; return;
} }
Serial.println("Printer data stored in database");
printerData.toolTemp = (const char*) pr2["extruder"][0]["tempRead"]; printerData.toolTemp = (const char*) pr2["extruder"][0]["tempRead"];
printerData.toolTargetTemp = (const char*) pr2["extruder"][0]["tempSet"]; printerData.toolTargetTemp = (const char*) pr2["extruder"][0]["tempSet"];
printerData.bedTemp = (const char*) pr2["heatedBeds"][0]["tempRead"]; printerData.bedTemp = (const char*) pr2["heatedBeds"][0]["tempRead"];