From 13c04d65e8a8a6d88f27090580c563a48454846b Mon Sep 17 00:00:00 2001
From: Robert Stein
Date: Mon, 14 Dec 2020 08:58:55 +0100
Subject: [PATCH] Bringing klipper up (can use ip or hostname, preffer ip)
---
src/Clients/KlipperClient.cpp | 68 ++++++++++++++++-------------
src/Clients/KlipperClient.h | 2 +-
src/Display/BaseDisplayClient.h | 1 +
src/Display/NextionDisplay.cpp | 4 ++
src/Display/NextionDisplay.h | 1 +
src/Display/OledDisplay.cpp | 8 ++++
src/Display/OledDisplay.h | 1 +
src/Global/GlobalDataController.cpp | 2 +-
src/Global/GlobalDataController.h | 2 +-
src/Network/WebServer.cpp | 63 ++++++++++++--------------
10 files changed, 85 insertions(+), 67 deletions(-)
diff --git a/src/Clients/KlipperClient.cpp b/src/Clients/KlipperClient.cpp
index fd6673c..5d520a4 100644
--- a/src/Clients/KlipperClient.cpp
+++ b/src/Clients/KlipperClient.cpp
@@ -11,8 +11,8 @@ KlipperClient::KlipperClient(GlobalDataController *globalDataController, DebugCo
void KlipperClient::updatePrintClient() {
this->globalDataController->getPrinterHostName().toCharArray(this->myServer, 100);
- myApiKey = this->globalDataController->getPrinterApiKey();
- myPort = this->globalDataController->getPrinterPort();
+ this->globalDataController->getPrinterServer().toCharArray(this->myServerIp, 30);
+ this->myPort = this->globalDataController->getPrinterPort();
encodedAuth = "";
if (this->globalDataController->getPrinterAuthUser() != "") {
String userpass = this->globalDataController->getPrinterAuthUser() + ":" + this->globalDataController->getPrinterAuthPass();
@@ -25,11 +25,8 @@ void KlipperClient::updatePrintClient() {
boolean KlipperClient::validate() {
boolean rtnValue = false;
printerData.error = "";
- if (String(myServer) == "") {
- printerData.error += "Server address is required; ";
- }
- if (myApiKey == "") {
- printerData.error += "ApiKey is required; ";
+ if ((String(this->myServer) == "") && (String(this->myServerIp) == "")) {
+ printerData.error += "Server address or host name is required; ";
}
if (printerData.error == "") {
rtnValue = true;
@@ -40,14 +37,17 @@ boolean KlipperClient::validate() {
WiFiClient KlipperClient::getSubmitRequest(String apiGetData) {
WiFiClient printClient;
printClient.setTimeout(5000);
+ const char *targetServer = this->myServerIp;
+ if (String(this->myServerIp) == "") {
+ targetServer = this->myServer;
+ }
this->debugController->printLn("Getting Klipper Data via GET");
this->debugController->printLn(apiGetData);
result = "";
- if (printClient.connect(myServer, myPort)) { //starts client connection, checks for connection
+ if (printClient.connect(targetServer, myPort)) { //starts client connection, checks for connection
printClient.println(apiGetData);
- printClient.println("Host: " + String(myServer) + ":" + String(myPort));
- printClient.println("X-Api-Key: " + myApiKey);
+ printClient.println("Host: " + String(targetServer) + ":" + String(myPort));
if (encodedAuth != "") {
printClient.print("Authorization: ");
printClient.println("Basic " + encodedAuth);
@@ -55,18 +55,18 @@ WiFiClient KlipperClient::getSubmitRequest(String apiGetData) {
printClient.println("User-Agent: ArduinoWiFi/1.1");
printClient.println("Connection: close");
if (printClient.println() == 0) {
- this->debugController->printLn("Connection to " + String(myServer) + ":" + String(myPort) + " failed.");
+ this->debugController->printLn("Connection to " + String(targetServer) + ":" + String(myPort) + " failed.");
this->debugController->printLn("");
resetPrintData();
- printerData.error = "Connection to " + String(myServer) + ":" + String(myPort) + " failed.";
+ printerData.error = "Connection to " + String(targetServer) + ":" + String(myPort) + " failed.";
return printClient;
}
}
else {
- this->debugController->printLn("Connection to Klipper failed: " + String(myServer) + ":" + String(myPort)); //error message if no client connect
+ this->debugController->printLn("Connection to Klipper failed: " + String(targetServer) + ":" + String(myPort)); //error message if no client connect
this->debugController->printLn("");
resetPrintData();
- printerData.error = "Connection to Klipper failed: " + String(myServer) + ":" + String(myPort);
+ printerData.error = "Connection to Klipper failed: " + String(targetServer) + ":" + String(myPort);
return printClient;
}
@@ -85,7 +85,7 @@ WiFiClient KlipperClient::getSubmitRequest(String apiGetData) {
char endOfHeaders[] = "\r\n\r\n";
if (!printClient.find(endOfHeaders)) {
this->debugController->printLn("Invalid response");
- printerData.error = "Invalid response from " + String(myServer) + ":" + String(myPort);
+ printerData.error = "Invalid response from " + String(targetServer) + ":" + String(myPort);
printerData.state = "";
}
@@ -95,18 +95,21 @@ WiFiClient KlipperClient::getSubmitRequest(String apiGetData) {
WiFiClient KlipperClient::getPostRequest(String apiPostData, String apiPostBody) {
WiFiClient printClient;
printClient.setTimeout(5000);
+ const char *targetServer = this->myServerIp;
+ if (String(this->myServerIp) == "") {
+ targetServer = this->myServer;
+ }
this->debugController->printLn("Getting Klipper Data via POST");
this->debugController->printLn(apiPostData + " | " + apiPostBody);
result = "";
- if (printClient.connect(myServer, myPort)) { //starts client connection, checks for connection
+ if (printClient.connect(targetServer, myPort)) { //starts client connection, checks for connection
printClient.println(apiPostData);
- printClient.println("Host: " + String(myServer) + ":" + String(myPort));
+ printClient.println("Host: " + String(targetServer) + ":" + String(myPort));
printClient.println("Connection: close");
- printClient.println("X-Api-Key: " + myApiKey);
if (encodedAuth != "") {
- printClient.print("Authorization: ");
- printClient.println("Basic " + encodedAuth);
+ printClient.print("Authorization: ");
+ printClient.println("Basic " + encodedAuth);
}
printClient.println("User-Agent: ArduinoWiFi/1.1");
printClient.println("Content-Type: application/json");
@@ -115,18 +118,18 @@ WiFiClient KlipperClient::getPostRequest(String apiPostData, String apiPostBody)
printClient.println();
printClient.println(apiPostBody);
if (printClient.println() == 0) {
- this->debugController->printLn("Connection to " + String(myServer) + ":" + String(myPort) + " failed.");
- this->debugController->printLn("");
- resetPrintData();
- printerData.error = "Connection to " + String(myServer) + ":" + String(myPort) + " failed.";
- return printClient;
+ this->debugController->printLn("Connection to " + String(targetServer) + ":" + String(myPort) + " failed.");
+ this->debugController->printLn("");
+ resetPrintData();
+ printerData.error = "Connection to " + String(targetServer) + ":" + String(myPort) + " failed.";
+ return printClient;
}
}
else {
- this->debugController->printLn("Connection to Klipper failed: " + String(myServer) + ":" + String(myPort)); //error message if no client connect
+ this->debugController->printLn("Connection to Klipper failed: " + String(targetServer) + ":" + String(myPort)); //error message if no client connect
this->debugController->printLn("");
resetPrintData();
- printerData.error = "Connection to Klipper failed: " + String(myServer) + ":" + String(myPort);
+ printerData.error = "Connection to Klipper failed: " + String(targetServer) + ":" + String(myPort);
return printClient;
}
@@ -145,7 +148,7 @@ WiFiClient KlipperClient::getPostRequest(String apiPostData, String apiPostBody)
char endOfHeaders[] = "\r\n\r\n";
if (!printClient.find(endOfHeaders)) {
this->debugController->printLn("Invalid response");
- printerData.error = "Invalid response from " + String(myServer) + ":" + String(myPort);
+ printerData.error = "Invalid response from " + String(targetServer) + ":" + String(myPort);
printerData.state = "";
}
@@ -156,6 +159,11 @@ void KlipperClient::getPrinterJobResults() {
if (!validate()) {
return;
}
+ const char *targetServer = this->myServerIp;
+ if (String(this->myServerIp) == "") {
+ targetServer = this->myServer;
+ }
+
//**** get the Printer Job status
String apiGetData = "GET /printer/objects/query?heater_bed&extruder&webhooks&virtual_sdcard&print_stats&toolhead&display_status";
WiFiClient printClient = getSubmitRequest(apiGetData);
@@ -168,8 +176,8 @@ void KlipperClient::getPrinterJobResults() {
// Parse JSON object
DeserializationError error = deserializeJson(jsonBuffer, printClient);
if (error) {
- this->debugController->printLn("Klipper Data Parsing failed: " + String(myServer) + ":" + String(myPort));
- printerData.error = "Klipper Data Parsing failed: " + String(myServer) + ":" + String(myPort);
+ this->debugController->printLn("Klipper Data Parsing failed: " + String(targetServer) + ":" + String(myPort));
+ printerData.error = "Klipper Data Parsing failed: " + String(targetServer) + ":" + String(myPort);
printerData.state = "";
printerData.isPrinting = false;
printerData.toolTemp = "";
diff --git a/src/Clients/KlipperClient.h b/src/Clients/KlipperClient.h
index fd077a1..41bf050 100644
--- a/src/Clients/KlipperClient.h
+++ b/src/Clients/KlipperClient.h
@@ -9,8 +9,8 @@
class KlipperClient : public BasePrinterClient {
private:
char myServer[100];
+ char myServerIp[30];
int myPort = 7125;
- String myApiKey = "";
String encodedAuth = "";
boolean pollPsu;
const String printerType = "Klipper";
diff --git a/src/Display/BaseDisplayClient.h b/src/Display/BaseDisplayClient.h
index f668e2d..f101726 100644
--- a/src/Display/BaseDisplayClient.h
+++ b/src/Display/BaseDisplayClient.h
@@ -7,6 +7,7 @@ public:
virtual void preSetup();
virtual void postSetup();
virtual void handleUpdate();
+ virtual void flipDisplayUpdate();
virtual void showBootScreen();
virtual void showApAccessScreen(String apSsid, String apIp);
virtual void showWebserverSplashScreen(bool isEnabled);
diff --git a/src/Display/NextionDisplay.cpp b/src/Display/NextionDisplay.cpp
index 053ca56..4cd1d3d 100644
--- a/src/Display/NextionDisplay.cpp
+++ b/src/Display/NextionDisplay.cpp
@@ -20,6 +20,10 @@ void NextionDisplay::handleUpdate() {
}
+void NextionDisplay::flipDisplayUpdate() {
+
+}
+
void NextionDisplay::showBootScreen() {
String command("version.txt=");
command += "\"for " + this->globalDataController->getPrinterClient()->getPrinterType() + " V" + this->globalDataController->getVersion() + "\"";
diff --git a/src/Display/NextionDisplay.h b/src/Display/NextionDisplay.h
index 6fb8a3a..25545a5 100644
--- a/src/Display/NextionDisplay.h
+++ b/src/Display/NextionDisplay.h
@@ -18,6 +18,7 @@ public:
void preSetup();
void postSetup();
void handleUpdate();
+ void flipDisplayUpdate();
void showBootScreen();
void showApAccessScreen(String apSsid, String apIp);
void showWebserverSplashScreen(bool isEnabled);
diff --git a/src/Display/OledDisplay.cpp b/src/Display/OledDisplay.cpp
index 36a8df4..52ba8a2 100644
--- a/src/Display/OledDisplay.cpp
+++ b/src/Display/OledDisplay.cpp
@@ -46,6 +46,14 @@ void OledDisplay::handleUpdate() {
this->ui->update();
}
+void OledDisplay::flipDisplayUpdate() {
+ this->ui->init();
+ if (this->globalDataController->isDisplayInverted()) {
+ this->oledDisplay->flipScreenVertically(); // connections at top of OLED display
+ }
+ this->ui->update();
+}
+
void OledDisplay::showBootScreen() {
this->oledDisplay->setTextAlignment(TEXT_ALIGN_CENTER);
this->oledDisplay->setContrast(255); // default is 255
diff --git a/src/Display/OledDisplay.h b/src/Display/OledDisplay.h
index 57bb63f..4381834 100644
--- a/src/Display/OledDisplay.h
+++ b/src/Display/OledDisplay.h
@@ -27,6 +27,7 @@ public:
void preSetup();
void postSetup();
void handleUpdate();
+ void flipDisplayUpdate();
void showBootScreen();
void showApAccessScreen(String apSsid, String apIp);
void showWebserverSplashScreen(bool isEnabled);
diff --git a/src/Global/GlobalDataController.cpp b/src/Global/GlobalDataController.cpp
index 3c1020d..3d042f1 100644
--- a/src/Global/GlobalDataController.cpp
+++ b/src/Global/GlobalDataController.cpp
@@ -208,7 +208,7 @@ void GlobalDataController::setDisplayClient(BaseDisplayClient *baseDisplayClient
this->baseDisplayClient = baseDisplayClient;
}
-BaseDisplayClient *GlobalDataController::setDisplayClient() {
+BaseDisplayClient *GlobalDataController::getDisplayClient() {
return this->baseDisplayClient;
}
diff --git a/src/Global/GlobalDataController.h b/src/Global/GlobalDataController.h
index acc48f6..0611fc9 100644
--- a/src/Global/GlobalDataController.h
+++ b/src/Global/GlobalDataController.h
@@ -64,7 +64,7 @@ public:
TimeClient *getTimeClient();
OpenWeatherMapClient *getWeatherClient();
BasePrinterClient *getPrinterClient();
- BaseDisplayClient *setDisplayClient();
+ BaseDisplayClient *getDisplayClient();
String getLastReportStatus();
String getVersion();
diff --git a/src/Network/WebServer.cpp b/src/Network/WebServer.cpp
index 0ddbf5f..e8146b8 100644
--- a/src/Network/WebServer.cpp
+++ b/src/Network/WebServer.cpp
@@ -323,13 +323,10 @@ void WebServer::handleUpdateConfig() {
this->globalDataController->getPrinterClient()->getPrinterJobResults();
this->globalDataController->getPrinterClient()->getPrinterPsuState();
- /*if (INVERT_DISPLAY != flipOld) {
- ui.init();
- if(INVERT_DISPLAY)
- display.flipScreenVertically();
- ui.update();
+ if (this->globalDataController->isDisplayInverted() != flipOld) {
+ this->globalDataController->getDisplayClient()->flipDisplayUpdate();
}
- checkDisplay();*/
+ this->globalDataController->getDisplayClient()->handleUpdate();
this->globalDataController->getTimeClient()->resetLastEpoch();
this->redirectHome();
}
@@ -415,11 +412,10 @@ void WebServer::handleConfigure() {
this->server->sendContent(html);
}
else if (printerClient->getPrinterType() == "Klipper") {
- // TODO: INVALID JAVASCRIPT HERE
- /*html = "";
+ this->server->sendContent(html);
}
else {
html = "";
+ "
";
+ if ((printerClient->getPrinterType() == "Repetier") || (printerClient->getPrinterType() == "Klipper")) {
+ form += ""
+ ""
+ "";
}
- else if (printerClient->getPrinterType() == "Klipper") {
- form += ""
- ""
- "";
- }
else {
form += "";
}
- form += ""
- "";
+ form += ""
+ "";
- form.replace("%OCTOKEY%", this->globalDataController->getPrinterApiKey());
- form.replace("%OCTOHOST%", this->globalDataController->getPrinterHostName());
- form.replace("%OCTOADDRESS%", this->globalDataController->getPrinterServer());
- form.replace("%OCTOPORT%", String(this->globalDataController->getPrinterPort()));
- form.replace("%OCTOUSER%", this->globalDataController->getPrinterAuthUser());
- form.replace("%OCTOPASS%", this->globalDataController->getPrinterAuthPass());
+ form.replace("%PRINTERAPIKEY%", this->globalDataController->getPrinterApiKey());
+ form.replace("%PRINTERHOST%", this->globalDataController->getPrinterHostName());
+ form.replace("%PRINTERADDRESS%", this->globalDataController->getPrinterServer());
+ form.replace("%PRINTERPORT%", String(this->globalDataController->getPrinterPort()));
+ form.replace("%PRINTERUSER%", this->globalDataController->getPrinterAuthUser());
+ form.replace("%PRINTERPASS%", this->globalDataController->getPrinterAuthPass());
this->server->sendContent(form);
form = FPSTR(CLOCK_FORM);