Added initial preheat and cooldown menus
parent
12528dac1e
commit
8acfa5b7fd
|
|
@ -0,0 +1,80 @@
|
||||||
|
#include "CooldownMenu.h"
|
||||||
|
#include "TemperatureMenuItem.h"
|
||||||
|
#include "TemperaturePreset.h"
|
||||||
|
|
||||||
|
CooldownMenu::CooldownMenu()
|
||||||
|
{
|
||||||
|
MenuTitle = "Cooldown Menu";
|
||||||
|
}
|
||||||
|
|
||||||
|
void CooldownMenu::processKey(char c)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (c >= '1' && c <= '6')
|
||||||
|
{
|
||||||
|
|
||||||
|
TemperatureMenuItem *item = (TemperatureMenuItem *)getItemForKey(c);
|
||||||
|
|
||||||
|
if (item != NULL)
|
||||||
|
{
|
||||||
|
TriggerCooldown(item);
|
||||||
|
doExit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Menu::processKey(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CooldownMenu::TriggerCooldown(TemperatureMenuItem *item)
|
||||||
|
{
|
||||||
|
if (item->preheatBed)
|
||||||
|
{
|
||||||
|
client->preheatBed(item->preset->bed);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item->preheatChamber)
|
||||||
|
{
|
||||||
|
client->preheatChamber(item->preset->chamber);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item->preheatExtruder)
|
||||||
|
{
|
||||||
|
client->preheatTool(0, item->preset->extruder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CooldownMenu::beforeShow()
|
||||||
|
{
|
||||||
|
TemperaturePreset *cooldown = new TemperaturePreset();
|
||||||
|
cooldown->bed = 0;
|
||||||
|
cooldown->chamber = 0;
|
||||||
|
cooldown->extruder = 0;
|
||||||
|
|
||||||
|
menuItems.clear();
|
||||||
|
TemperatureMenuItem *all = new TemperatureMenuItem("All");
|
||||||
|
all->preset = cooldown;
|
||||||
|
|
||||||
|
all->preheatBed = true;
|
||||||
|
all->preheatChamber = true;
|
||||||
|
all->preheatExtruder = true;
|
||||||
|
|
||||||
|
menuItems.add(all);
|
||||||
|
|
||||||
|
TemperatureMenuItem *extruder = new TemperatureMenuItem("Extruder");
|
||||||
|
extruder->preset = cooldown;
|
||||||
|
extruder->preheatExtruder = true;
|
||||||
|
|
||||||
|
menuItems.add(extruder);
|
||||||
|
|
||||||
|
TemperatureMenuItem *bed = new TemperatureMenuItem("Bed");
|
||||||
|
bed->preset = cooldown;
|
||||||
|
bed->preheatBed = true;
|
||||||
|
|
||||||
|
menuItems.add(bed);
|
||||||
|
|
||||||
|
TemperatureMenuItem *chamber = new TemperatureMenuItem("Chamber");
|
||||||
|
chamber->preset = cooldown;
|
||||||
|
chamber->preheatChamber = true;
|
||||||
|
|
||||||
|
menuItems.add(chamber);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Menu.h"
|
||||||
|
#include "../OctoPrintClient.h"
|
||||||
|
#include <LinkedList.h>
|
||||||
|
#include "TemperatureMenuItem.h"
|
||||||
|
|
||||||
|
class CooldownMenu : public Menu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CooldownMenu();
|
||||||
|
void beforeShow() override;
|
||||||
|
void processKey(char c) override;
|
||||||
|
void TriggerCooldown (TemperatureMenuItem* item);
|
||||||
|
|
||||||
|
OctoPrintClient *client;
|
||||||
|
};
|
||||||
|
|
@ -12,6 +12,25 @@ Menu::Menu(String menuTitle)
|
||||||
Menu();
|
Menu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Menu::beforeShow() {
|
||||||
|
}
|
||||||
|
|
||||||
|
MenuItem* Menu::getItemForKey (char c) {
|
||||||
|
if (c >= '1' && c <= '6') {
|
||||||
|
int offset = c - '1';
|
||||||
|
|
||||||
|
if (offset < MENU_MAX_DISPLAY_ITEMS) {
|
||||||
|
int itemNum = startPage * MENU_MAX_DISPLAY_ITEMS + offset;
|
||||||
|
|
||||||
|
if (itemNum < menuItems.size()) {
|
||||||
|
return menuItems[itemNum];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void Menu::processKey(char c)
|
void Menu::processKey(char c)
|
||||||
{
|
{
|
||||||
switch (c)
|
switch (c)
|
||||||
|
|
@ -32,6 +51,8 @@ void Menu::processKey(char c)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
displayMillis = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menu::doExit(void)
|
void Menu::doExit(void)
|
||||||
|
|
@ -105,6 +126,7 @@ void Menu::drawMenu(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x,
|
||||||
yPos = MENU_ITEM_START_POS_Y;
|
yPos = MENU_ITEM_START_POS_Y;
|
||||||
xPos = MENU_ITEM_SECOND_COLUMN_START_X;
|
xPos = MENU_ITEM_SECOND_COLUMN_START_X;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
display->fillRect(0, MENU_BOTTOM_BAR_LINE, 128, 64 - MENU_BOTTOM_BAR_LINE + 1);
|
display->fillRect(0, MENU_BOTTOM_BAR_LINE, 128, 64 - MENU_BOTTOM_BAR_LINE + 1);
|
||||||
|
|
||||||
|
|
@ -146,7 +168,7 @@ void Menu::drawMenu(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x,
|
||||||
display->drawString(44 + SMALL_KEYPAD_BUTTON_ICON_WIDTH + 1, bottomBarStart - 2, "Exit");
|
display->drawString(44 + SMALL_KEYPAD_BUTTON_ICON_WIDTH + 1, bottomBarStart - 2, "Exit");
|
||||||
|
|
||||||
drawSmallKeyboardButtonIcon(display, 45, bottomBarStart, '0', true, true);
|
drawSmallKeyboardButtonIcon(display, 45, bottomBarStart, '0', true, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menu::drawKeyboardButtonIcon(OLEDDisplay *display, int16_t x, int16_t y, char keyButton, const uint8_t *font, int16_t iconWidth, int16_t iconHeight, int16_t xOffset, int16_t yOffset, bool inverted, bool filled)
|
void Menu::drawKeyboardButtonIcon(OLEDDisplay *display, int16_t x, int16_t y, char keyButton, const uint8_t *font, int16_t iconWidth, int16_t iconHeight, int16_t xOffset, int16_t yOffset, bool inverted, bool filled)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "MenuItem.h"
|
#include "MenuItem.h"
|
||||||
|
|
@ -31,14 +32,19 @@ public:
|
||||||
Menu(String menuTitle);
|
Menu(String menuTitle);
|
||||||
String MenuTitle;
|
String MenuTitle;
|
||||||
void drawMenu(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
|
void drawMenu(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
|
||||||
void processKey(char c);
|
virtual void beforeShow();
|
||||||
|
virtual void processKey(char c);
|
||||||
|
MenuItem* getItemForKey (char c);
|
||||||
int getMaxPage();
|
int getMaxPage();
|
||||||
void (*exitCallback)(void) = NULL;
|
void (*exitCallback)(void) = NULL;
|
||||||
int startPage = 0;
|
int startPage = 0;
|
||||||
LinkedList<MenuItem *> menuItems;
|
LinkedList<MenuItem *> menuItems;
|
||||||
unsigned long displayMillis;
|
unsigned long displayMillis;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void doExit (void);
|
||||||
private:
|
private:
|
||||||
void doExit (void);
|
|
||||||
void drawRegularKeyboardButtonIcon(OLEDDisplay *display, int16_t x, int16_t y, char keyButton, bool inverted, bool filled);
|
void drawRegularKeyboardButtonIcon(OLEDDisplay *display, int16_t x, int16_t y, char keyButton, bool inverted, bool filled);
|
||||||
void drawSmallKeyboardButtonIcon(OLEDDisplay *display, int16_t x, int16_t y, char keyButton, bool inverted, bool filled);
|
void drawSmallKeyboardButtonIcon(OLEDDisplay *display, int16_t x, int16_t y, char keyButton, bool inverted, bool filled);
|
||||||
void drawKeyboardButtonIcon(OLEDDisplay *display, int16_t x, int16_t y, char keyButton, const uint8_t *font, int16_t iconWidth, int16_t iconHeight, int16_t xOffset, int16_t yOffset, bool inverted, bool filled);
|
void drawKeyboardButtonIcon(OLEDDisplay *display, int16_t x, int16_t y, char keyButton, const uint8_t *font, int16_t iconWidth, int16_t iconHeight, int16_t xOffset, int16_t yOffset, bool inverted, bool filled);
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
class MenuItem {
|
class MenuItem {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,116 @@
|
||||||
#include "PreheatMenu.h"
|
#include "PreheatMenu.h"
|
||||||
|
#include "TemperatureMenuItem.h"
|
||||||
|
|
||||||
PreheatMenu::PreheatMenu () {
|
PreheatMenu::PreheatMenu()
|
||||||
|
{
|
||||||
MenuTitle = "Preheat Menu";
|
MenuTitle = "Preheat Menu";
|
||||||
|
presetMenuItems = LinkedList<MenuItem *>();
|
||||||
|
temperatureItems = LinkedList<MenuItem *>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PreheatMenu::RetrieveTemperatures () {
|
void PreheatMenu::RetrieveTemperatures()
|
||||||
|
{
|
||||||
|
presetMenuItems.clear();
|
||||||
|
Serial.println(client->temperaturePresets.size());
|
||||||
|
for (int i = 0; i < client->temperaturePresets.size(); i++)
|
||||||
|
{
|
||||||
|
TemperatureMenuItem *item = new TemperatureMenuItem(client->temperaturePresets[i]->PresetName);
|
||||||
|
item->preset = client->temperaturePresets[i];
|
||||||
|
|
||||||
|
presetMenuItems.add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PreheatMenu::processKey(char c)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (c >= '1' && c <= '6')
|
||||||
|
{
|
||||||
|
if (selectPreset)
|
||||||
|
{
|
||||||
|
TemperatureMenuItem *item = (TemperatureMenuItem *)getItemForKey(c);
|
||||||
|
|
||||||
|
if (item != NULL)
|
||||||
|
{
|
||||||
|
CreateTemperatureMenu(item);
|
||||||
|
menuItems = temperatureItems;
|
||||||
|
MenuTitle = "Preheat: " + item->ItemName;
|
||||||
|
selectPreset = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TemperatureMenuItem *item = (TemperatureMenuItem *)getItemForKey(c);
|
||||||
|
|
||||||
|
if (item != NULL)
|
||||||
|
{
|
||||||
|
TriggerPreheat(item);
|
||||||
|
doExit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Menu::processKey(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PreheatMenu::TriggerPreheat(TemperatureMenuItem *item) {
|
||||||
|
if (item->preheatBed) {
|
||||||
|
client->preheatBed(item->preset->bed);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item->preheatChamber) {
|
||||||
|
client->preheatChamber(item->preset->chamber);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item->preheatExtruder) {
|
||||||
|
client->preheatTool(0, item->preset->extruder);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void PreheatMenu::CreateTemperatureMenu(TemperatureMenuItem *item)
|
||||||
|
{
|
||||||
|
temperatureItems.clear();
|
||||||
|
TemperatureMenuItem *all = new TemperatureMenuItem("All");
|
||||||
|
all->preset = item->preset;
|
||||||
|
all->preheatBed = true;
|
||||||
|
all->preheatChamber = true;
|
||||||
|
all->preheatExtruder = true;
|
||||||
|
|
||||||
|
temperatureItems.add(all);
|
||||||
|
|
||||||
|
if (item->preset->extruder > 0)
|
||||||
|
{
|
||||||
|
TemperatureMenuItem *extruder = new TemperatureMenuItem("Extruder");
|
||||||
|
extruder->preset = item->preset;
|
||||||
|
extruder->preheatExtruder = true;
|
||||||
|
|
||||||
|
temperatureItems.add(extruder);
|
||||||
|
}
|
||||||
|
if (item->preset->bed > 0)
|
||||||
|
{
|
||||||
|
TemperatureMenuItem *bed = new TemperatureMenuItem("Bed");
|
||||||
|
bed->preset = item->preset;
|
||||||
|
bed->preheatBed = true;
|
||||||
|
|
||||||
|
temperatureItems.add(bed);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item->preset->chamber > 0)
|
||||||
|
{
|
||||||
|
TemperatureMenuItem *chamber = new TemperatureMenuItem("Chamber");
|
||||||
|
chamber->preset = item->preset;
|
||||||
|
chamber->preheatChamber = true;
|
||||||
|
|
||||||
|
temperatureItems.add(chamber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PreheatMenu::beforeShow()
|
||||||
|
{
|
||||||
|
RetrieveTemperatures();
|
||||||
|
selectPreset = true;
|
||||||
|
MenuTitle = "Preheat Menu";
|
||||||
|
menuItems = presetMenuItems;
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,22 @@
|
||||||
#include "Menu.h"
|
#pragma once
|
||||||
|
|
||||||
class PreheatMenu: public Menu {
|
#include "Menu.h"
|
||||||
|
#include "../OctoPrintClient.h"
|
||||||
|
#include <LinkedList.h>
|
||||||
|
#include "TemperatureMenuItem.h"
|
||||||
|
|
||||||
|
class PreheatMenu : public Menu
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
PreheatMenu();
|
PreheatMenu();
|
||||||
void RetrieveTemperatures();
|
void beforeShow() override;
|
||||||
|
void processKey(char c) override;
|
||||||
|
void RetrieveTemperatures();
|
||||||
|
void CreateTemperatureMenu (TemperatureMenuItem* item);
|
||||||
|
void TriggerPreheat (TemperatureMenuItem* item);
|
||||||
|
LinkedList<MenuItem *> presetMenuItems;
|
||||||
|
LinkedList<MenuItem *> temperatureItems;
|
||||||
|
OctoPrintClient *client;
|
||||||
|
private:
|
||||||
|
bool selectPreset = true;
|
||||||
};
|
};
|
||||||
|
|
@ -1,13 +1,14 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include "MenuItem.h"
|
#include "MenuItem.h"
|
||||||
|
#include "TemperaturePreset.h"
|
||||||
|
|
||||||
class TemperatureMenuItem : public MenuItem
|
class TemperatureMenuItem : public MenuItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TemperatureMenuItem(String itemName);
|
TemperatureMenuItem(String itemName);
|
||||||
int bed;
|
TemperaturePreset* preset;
|
||||||
int chamber;
|
bool preheatBed = false;
|
||||||
int extruder;
|
bool preheatChamber = false;
|
||||||
bool has_bed_temp;
|
bool preheatExtruder = false;
|
||||||
bool has_extruder_temp;
|
|
||||||
bool has_chamber_temp;
|
|
||||||
};
|
};
|
||||||
|
|
@ -26,17 +26,20 @@ SOFTWARE.
|
||||||
|
|
||||||
#include "OctoPrintClient.h"
|
#include "OctoPrintClient.h"
|
||||||
|
|
||||||
OctoPrintClient::OctoPrintClient(String ApiKey, String server, int port, String user, String pass, boolean psu) {
|
OctoPrintClient::OctoPrintClient(String ApiKey, String server, int port, String user, String pass, boolean psu)
|
||||||
|
{
|
||||||
temperaturePresets = LinkedList<TemperaturePreset *>();
|
temperaturePresets = LinkedList<TemperaturePreset *>();
|
||||||
updatePrintClient(ApiKey, server, port, user, pass, psu);
|
updatePrintClient(ApiKey, server, port, user, pass, psu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctoPrintClient::updatePrintClient(String ApiKey, String server, int port, String user, String pass, boolean psu) {
|
void OctoPrintClient::updatePrintClient(String ApiKey, String server, int port, String user, String pass, boolean psu)
|
||||||
|
{
|
||||||
server.toCharArray(myServer, 100);
|
server.toCharArray(myServer, 100);
|
||||||
myApiKey = ApiKey;
|
myApiKey = ApiKey;
|
||||||
myPort = port;
|
myPort = port;
|
||||||
encodedAuth = "";
|
encodedAuth = "";
|
||||||
if (user != "") {
|
if (user != "")
|
||||||
|
{
|
||||||
String userpass = user + ":" + pass;
|
String userpass = user + ":" + pass;
|
||||||
base64 b64;
|
base64 b64;
|
||||||
encodedAuth = b64.encode(userpass, true);
|
encodedAuth = b64.encode(userpass, true);
|
||||||
|
|
@ -44,47 +47,56 @@ void OctoPrintClient::updatePrintClient(String ApiKey, String server, int port,
|
||||||
pollPsu = psu;
|
pollPsu = psu;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean OctoPrintClient::validate() {
|
boolean OctoPrintClient::validate()
|
||||||
|
{
|
||||||
boolean rtnValue = false;
|
boolean rtnValue = false;
|
||||||
printerData.error = "";
|
printerData.error = "";
|
||||||
if (String(myServer) == "") {
|
if (String(myServer) == "")
|
||||||
|
{
|
||||||
printerData.error += "Server address is required; ";
|
printerData.error += "Server address is required; ";
|
||||||
}
|
}
|
||||||
if (myApiKey == "") {
|
if (myApiKey == "")
|
||||||
|
{
|
||||||
printerData.error += "ApiKey is required; ";
|
printerData.error += "ApiKey is required; ";
|
||||||
}
|
}
|
||||||
if (printerData.error == "") {
|
if (printerData.error == "")
|
||||||
|
{
|
||||||
rtnValue = true;
|
rtnValue = true;
|
||||||
}
|
}
|
||||||
return rtnValue;
|
return rtnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
WiFiClient OctoPrintClient::getSubmitRequest(String apiGetData) {
|
WiFiClient OctoPrintClient::getSubmitRequest(String apiGetData)
|
||||||
|
{
|
||||||
WiFiClient printClient;
|
WiFiClient printClient;
|
||||||
printClient.setTimeout(5000);
|
printClient.setTimeout(5000);
|
||||||
|
|
||||||
Serial.println("Getting Octoprint Data via GET");
|
Serial.println("Getting Octoprint Data via GET");
|
||||||
Serial.println(apiGetData);
|
Serial.println(apiGetData);
|
||||||
result = "";
|
result = "";
|
||||||
if (printClient.connect(myServer, myPort)) { //starts client connection, checks for connection
|
if (printClient.connect(myServer, myPort))
|
||||||
|
{ //starts client connection, checks for connection
|
||||||
printClient.println(apiGetData);
|
printClient.println(apiGetData);
|
||||||
printClient.println("Host: " + String(myServer) + ":" + String(myPort));
|
printClient.println("Host: " + String(myServer) + ":" + String(myPort));
|
||||||
printClient.println("X-Api-Key: " + myApiKey);
|
printClient.println("X-Api-Key: " + myApiKey);
|
||||||
if (encodedAuth != "") {
|
if (encodedAuth != "")
|
||||||
|
{
|
||||||
printClient.print("Authorization: ");
|
printClient.print("Authorization: ");
|
||||||
printClient.println("Basic " + encodedAuth);
|
printClient.println("Basic " + encodedAuth);
|
||||||
}
|
}
|
||||||
printClient.println("User-Agent: ArduinoWiFi/1.1");
|
printClient.println("User-Agent: ArduinoWiFi/1.1");
|
||||||
printClient.println("Connection: close");
|
printClient.println("Connection: close");
|
||||||
if (printClient.println() == 0) {
|
if (printClient.println() == 0)
|
||||||
|
{
|
||||||
Serial.println("Connection to " + String(myServer) + ":" + String(myPort) + " failed.");
|
Serial.println("Connection to " + String(myServer) + ":" + String(myPort) + " failed.");
|
||||||
Serial.println();
|
Serial.println();
|
||||||
resetPrintData();
|
resetPrintData();
|
||||||
printerData.error = "Connection to " + String(myServer) + ":" + String(myPort) + " failed.";
|
printerData.error = "Connection to " + String(myServer) + ":" + String(myPort) + " failed.";
|
||||||
return printClient;
|
return printClient;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
Serial.println("Connection to OctoPrint failed: " + String(myServer) + ":" + String(myPort)); //error message if no client connect
|
Serial.println("Connection to OctoPrint failed: " + String(myServer) + ":" + String(myPort)); //error message if no client connect
|
||||||
Serial.println();
|
Serial.println();
|
||||||
resetPrintData();
|
resetPrintData();
|
||||||
|
|
@ -95,7 +107,8 @@ WiFiClient OctoPrintClient::getSubmitRequest(String apiGetData) {
|
||||||
// Check HTTP status
|
// Check HTTP status
|
||||||
char status[32] = {0};
|
char status[32] = {0};
|
||||||
printClient.readBytesUntil('\r', status, sizeof(status));
|
printClient.readBytesUntil('\r', status, sizeof(status));
|
||||||
if (strcmp(status, "HTTP/1.1 200 OK") != 0 && strcmp(status, "HTTP/1.1 409 CONFLICT") != 0) {
|
if (strcmp(status, "HTTP/1.1 200 OK") != 0 && strcmp(status, "HTTP/1.1 409 CONFLICT") != 0)
|
||||||
|
{
|
||||||
Serial.print(F("Unexpected response: "));
|
Serial.print(F("Unexpected response: "));
|
||||||
Serial.println(status);
|
Serial.println(status);
|
||||||
printerData.state = "";
|
printerData.state = "";
|
||||||
|
|
@ -105,7 +118,8 @@ WiFiClient OctoPrintClient::getSubmitRequest(String apiGetData) {
|
||||||
|
|
||||||
// Skip HTTP headers
|
// Skip HTTP headers
|
||||||
char endOfHeaders[] = "\r\n\r\n";
|
char endOfHeaders[] = "\r\n\r\n";
|
||||||
if (!printClient.find(endOfHeaders)) {
|
if (!printClient.find(endOfHeaders))
|
||||||
|
{
|
||||||
Serial.println(F("Invalid response"));
|
Serial.println(F("Invalid response"));
|
||||||
printerData.error = "Invalid response from " + String(myServer) + ":" + String(myPort);
|
printerData.error = "Invalid response from " + String(myServer) + ":" + String(myPort);
|
||||||
printerData.state = "";
|
printerData.state = "";
|
||||||
|
|
@ -114,19 +128,22 @@ WiFiClient OctoPrintClient::getSubmitRequest(String apiGetData) {
|
||||||
return printClient;
|
return printClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
WiFiClient OctoPrintClient::getPostRequest(String apiPostData, String apiPostBody) {
|
WiFiClient OctoPrintClient::getPostRequest(String apiPostData, String apiPostBody)
|
||||||
|
{
|
||||||
WiFiClient printClient;
|
WiFiClient printClient;
|
||||||
printClient.setTimeout(5000);
|
printClient.setTimeout(5000);
|
||||||
|
|
||||||
Serial.println("Getting Octoprint Data via POST");
|
Serial.println("Getting Octoprint Data via POST");
|
||||||
Serial.println(apiPostData + " | " + apiPostBody);
|
Serial.println(apiPostData + " | " + apiPostBody);
|
||||||
result = "";
|
result = "";
|
||||||
if (printClient.connect(myServer, myPort)) { //starts client connection, checks for connection
|
if (printClient.connect(myServer, myPort))
|
||||||
|
{ //starts client connection, checks for connection
|
||||||
printClient.println(apiPostData);
|
printClient.println(apiPostData);
|
||||||
printClient.println("Host: " + String(myServer) + ":" + String(myPort));
|
printClient.println("Host: " + String(myServer) + ":" + String(myPort));
|
||||||
printClient.println("Connection: close");
|
printClient.println("Connection: close");
|
||||||
printClient.println("X-Api-Key: " + myApiKey);
|
printClient.println("X-Api-Key: " + myApiKey);
|
||||||
if (encodedAuth != "") {
|
if (encodedAuth != "")
|
||||||
|
{
|
||||||
printClient.print("Authorization: ");
|
printClient.print("Authorization: ");
|
||||||
printClient.println("Basic " + encodedAuth);
|
printClient.println("Basic " + encodedAuth);
|
||||||
}
|
}
|
||||||
|
|
@ -136,15 +153,17 @@ WiFiClient OctoPrintClient::getPostRequest(String apiPostData, String apiPostBod
|
||||||
printClient.println(apiPostBody.length());
|
printClient.println(apiPostBody.length());
|
||||||
printClient.println();
|
printClient.println();
|
||||||
printClient.println(apiPostBody);
|
printClient.println(apiPostBody);
|
||||||
if (printClient.println() == 0) {
|
if (printClient.println() == 0)
|
||||||
|
{
|
||||||
Serial.println("Connection to " + String(myServer) + ":" + String(myPort) + " failed.");
|
Serial.println("Connection to " + String(myServer) + ":" + String(myPort) + " failed.");
|
||||||
Serial.println();
|
Serial.println();
|
||||||
resetPrintData();
|
resetPrintData();
|
||||||
printerData.error = "Connection to " + String(myServer) + ":" + String(myPort) + " failed.";
|
printerData.error = "Connection to " + String(myServer) + ":" + String(myPort) + " failed.";
|
||||||
return printClient;
|
return printClient;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
Serial.println("Connection to OctoPrint failed: " + String(myServer) + ":" + String(myPort)); //error message if no client connect
|
Serial.println("Connection to OctoPrint failed: " + String(myServer) + ":" + String(myPort)); //error message if no client connect
|
||||||
Serial.println();
|
Serial.println();
|
||||||
resetPrintData();
|
resetPrintData();
|
||||||
|
|
@ -155,7 +174,8 @@ WiFiClient OctoPrintClient::getPostRequest(String apiPostData, String apiPostBod
|
||||||
// Check HTTP status
|
// Check HTTP status
|
||||||
char status[32] = {0};
|
char status[32] = {0};
|
||||||
printClient.readBytesUntil('\r', status, sizeof(status));
|
printClient.readBytesUntil('\r', status, sizeof(status));
|
||||||
if (strcmp(status, "HTTP/1.1 200 OK") != 0 && strcmp(status, "HTTP/1.1 409 CONFLICT") != 0) {
|
if (strcmp(status, "HTTP/1.1 200 OK") != 0 && strcmp(status, "HTTP/1.1 409 CONFLICT") != 0)
|
||||||
|
{
|
||||||
Serial.print(F("Unexpected response: "));
|
Serial.print(F("Unexpected response: "));
|
||||||
Serial.println(status);
|
Serial.println(status);
|
||||||
printerData.state = "";
|
printerData.state = "";
|
||||||
|
|
@ -165,7 +185,8 @@ WiFiClient OctoPrintClient::getPostRequest(String apiPostData, String apiPostBod
|
||||||
|
|
||||||
// Skip HTTP headers
|
// Skip HTTP headers
|
||||||
char endOfHeaders[] = "\r\n\r\n";
|
char endOfHeaders[] = "\r\n\r\n";
|
||||||
if (!printClient.find(endOfHeaders)) {
|
if (!printClient.find(endOfHeaders))
|
||||||
|
{
|
||||||
Serial.println(F("Invalid response"));
|
Serial.println(F("Invalid response"));
|
||||||
printerData.error = "Invalid response from " + String(myServer) + ":" + String(myPort);
|
printerData.error = "Invalid response from " + String(myServer) + ":" + String(myPort);
|
||||||
printerData.state = "";
|
printerData.state = "";
|
||||||
|
|
@ -174,119 +195,193 @@ WiFiClient OctoPrintClient::getPostRequest(String apiPostData, String apiPostBod
|
||||||
return printClient;
|
return printClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctoPrintClient::getPrinterJobResults() {
|
void OctoPrintClient::preheatTool(int tool, int temperature)
|
||||||
if (!validate()) {
|
{
|
||||||
|
if (!validate())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char stringBuffer[255];
|
||||||
|
|
||||||
|
String apiPostData = "POST /api/printer/tool HTTP/1.1";
|
||||||
|
|
||||||
|
sprintf(stringBuffer, "{\"command\":\"target\", \"targets\":{\"tool%d\":%d}}", tool, temperature);
|
||||||
|
|
||||||
|
Serial.println(stringBuffer);
|
||||||
|
WiFiClient printClient = getPostRequest(apiPostData, stringBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OctoPrintClient::preheatBed(int temperature)
|
||||||
|
{
|
||||||
|
if (!validate())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char stringBuffer[255];
|
||||||
|
|
||||||
|
String apiPostData = "POST /api/printer/bed HTTP/1.1";
|
||||||
|
|
||||||
|
sprintf(stringBuffer, "{\"command\":\"target\", \"target\": %d}", temperature);
|
||||||
|
|
||||||
|
Serial.println(stringBuffer);
|
||||||
|
WiFiClient printClient = getPostRequest(apiPostData, stringBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OctoPrintClient::preheatChamber(int temperature)
|
||||||
|
{
|
||||||
|
if (!validate())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char stringBuffer[255];
|
||||||
|
|
||||||
|
String apiPostData = "POST /api/printer/chamber HTTP/1.1";
|
||||||
|
|
||||||
|
sprintf(stringBuffer, "{\"command\":\"target\", \"target\": %d}", temperature);
|
||||||
|
|
||||||
|
Serial.println(stringBuffer);
|
||||||
|
WiFiClient printClient = getPostRequest(apiPostData, stringBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OctoPrintClient::getPrinterJobResults()
|
||||||
|
{
|
||||||
|
if (!validate())
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//**** get the Printer Job status
|
//**** get the Printer Job status
|
||||||
String apiGetData = "GET /api/job HTTP/1.1";
|
String apiGetData = "GET /api/job HTTP/1.1";
|
||||||
WiFiClient printClient = getSubmitRequest(apiGetData);
|
WiFiClient printClient = getSubmitRequest(apiGetData);
|
||||||
if (printerData.error != "") {
|
if (printerData.error != "")
|
||||||
|
{
|
||||||
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
|
||||||
JsonObject& root = jsonBuffer.parseObject(printClient);
|
JsonObject &root = jsonBuffer.parseObject(printClient);
|
||||||
if (!root.success()) {
|
if (!root.success())
|
||||||
|
{
|
||||||
Serial.println("OctoPrint Data Parsing failed: " + String(myServer) + ":" + String(myPort));
|
Serial.println("OctoPrint Data Parsing failed: " + String(myServer) + ":" + String(myPort));
|
||||||
printerData.error = "OctoPrint Data Parsing failed: " + String(myServer) + ":" + String(myPort);
|
printerData.error = "OctoPrint Data Parsing failed: " + String(myServer) + ":" + String(myPort);
|
||||||
printerData.state = "";
|
printerData.state = "";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
printerData.averagePrintTime = (const char*)root["job"]["averagePrintTime"];
|
|
||||||
printerData.estimatedPrintTime = (const char*)root["job"]["estimatedPrintTime"];
|
|
||||||
printerData.fileName = (const char*)root["job"]["file"]["name"];
|
|
||||||
printerData.fileSize = (const char*)root["job"]["file"]["size"];
|
|
||||||
printerData.lastPrintTime = (const char*)root["job"]["lastPrintTime"];
|
|
||||||
printerData.progressCompletion = (const char*)root["progress"]["completion"];
|
|
||||||
printerData.progressFilepos = (const char*)root["progress"]["filepos"];
|
|
||||||
printerData.progressPrintTime = (const char*)root["progress"]["printTime"];
|
|
||||||
printerData.progressPrintTimeLeft = (const char*)root["progress"]["printTimeLeft"];
|
|
||||||
printerData.filamentLength = (const char*)root["job"]["filament"]["tool0"]["length"];
|
|
||||||
printerData.state = (const char*)root["state"];
|
|
||||||
|
|
||||||
if (isOperational()) {
|
printerData.averagePrintTime = (const char *)root["job"]["averagePrintTime"];
|
||||||
|
printerData.estimatedPrintTime = (const char *)root["job"]["estimatedPrintTime"];
|
||||||
|
printerData.fileName = (const char *)root["job"]["file"]["name"];
|
||||||
|
printerData.fileSize = (const char *)root["job"]["file"]["size"];
|
||||||
|
printerData.lastPrintTime = (const char *)root["job"]["lastPrintTime"];
|
||||||
|
printerData.progressCompletion = (const char *)root["progress"]["completion"];
|
||||||
|
printerData.progressFilepos = (const char *)root["progress"]["filepos"];
|
||||||
|
printerData.progressPrintTime = (const char *)root["progress"]["printTime"];
|
||||||
|
printerData.progressPrintTimeLeft = (const char *)root["progress"]["printTimeLeft"];
|
||||||
|
printerData.filamentLength = (const char *)root["job"]["filament"]["tool0"]["length"];
|
||||||
|
printerData.state = (const char *)root["state"];
|
||||||
|
|
||||||
|
if (isOperational())
|
||||||
|
{
|
||||||
Serial.println("Status: " + printerData.state);
|
Serial.println("Status: " + printerData.state);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
Serial.println("Printer Not Operational");
|
Serial.println("Printer Not Operational");
|
||||||
}
|
}
|
||||||
|
|
||||||
//**** get the Printer Temps and Stat
|
//**** get the Printer Temps and Stat
|
||||||
apiGetData = "GET /api/printer?exclude=sd,history HTTP/1.1";
|
apiGetData = "GET /api/printer?exclude=sd,history HTTP/1.1";
|
||||||
printClient = getSubmitRequest(apiGetData);
|
printClient = getSubmitRequest(apiGetData);
|
||||||
if (printerData.error != "") {
|
if (printerData.error != "")
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const size_t bufferSize2 = 3*JSON_OBJECT_SIZE(2) + 2*JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(9) + 300;
|
const size_t bufferSize2 = 3 * JSON_OBJECT_SIZE(2) + 2 * JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(9) + 300;
|
||||||
DynamicJsonBuffer jsonBuffer2(bufferSize2);
|
DynamicJsonBuffer jsonBuffer2(bufferSize2);
|
||||||
|
|
||||||
// Parse JSON object
|
// Parse JSON object
|
||||||
JsonObject& root2 = jsonBuffer2.parseObject(printClient);
|
JsonObject &root2 = jsonBuffer2.parseObject(printClient);
|
||||||
if (!root2.success()) {
|
if (!root2.success())
|
||||||
|
{
|
||||||
printerData.isPrinting = false;
|
printerData.isPrinting = false;
|
||||||
printerData.toolTemp = "";
|
printerData.toolTemp = "";
|
||||||
printerData.toolTargetTemp = "";
|
printerData.toolTargetTemp = "";
|
||||||
printerData.bedTemp = "";
|
printerData.bedTemp = "";
|
||||||
printerData.bedTargetTemp = (const char*)root2["temperature"]["bed"]["target"];
|
printerData.bedTargetTemp = (const char *)root2["temperature"]["bed"]["target"];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String printing = (const char*)root2["state"]["flags"]["printing"];
|
String printing = (const char *)root2["state"]["flags"]["printing"];
|
||||||
if (printing == "true") {
|
if (printing == "true")
|
||||||
|
{
|
||||||
printerData.isPrinting = true;
|
printerData.isPrinting = true;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
printerData.isPrinting = false;
|
printerData.isPrinting = false;
|
||||||
}
|
}
|
||||||
printerData.toolTemp = (const char*)root2["temperature"]["tool0"]["actual"];
|
printerData.toolTemp = (const char *)root2["temperature"]["tool0"]["actual"];
|
||||||
printerData.toolTargetTemp = (const char*)root2["temperature"]["tool0"]["target"];
|
printerData.toolTargetTemp = (const char *)root2["temperature"]["tool0"]["target"];
|
||||||
printerData.bedTemp = (const char*)root2["temperature"]["bed"]["actual"];
|
printerData.bedTemp = (const char *)root2["temperature"]["bed"]["actual"];
|
||||||
printerData.bedTargetTemp = (const char*)root2["temperature"]["bed"]["target"];
|
printerData.bedTargetTemp = (const char *)root2["temperature"]["bed"]["target"];
|
||||||
|
|
||||||
if (isPrinting()) {
|
if (isPrinting())
|
||||||
|
{
|
||||||
Serial.println("Status: " + printerData.state + " " + printerData.fileName + "(" + printerData.progressCompletion + "%)");
|
Serial.println("Status: " + printerData.state + " " + printerData.fileName + "(" + printerData.progressCompletion + "%)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctoPrintClient::getPrinterPsuState() {
|
void OctoPrintClient::getPrinterPsuState()
|
||||||
|
{
|
||||||
//**** get the PSU state (if enabled and printer operational)
|
//**** get the PSU state (if enabled and printer operational)
|
||||||
if (pollPsu && isOperational()) {
|
if (pollPsu && isOperational())
|
||||||
if (!validate()) {
|
{
|
||||||
|
if (!validate())
|
||||||
|
{
|
||||||
printerData.isPSUoff = false; // we do not know PSU state, so assume on.
|
printerData.isPSUoff = false; // we do not know PSU state, so assume on.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String apiPostData = "POST /api/plugin/psucontrol HTTP/1.1";
|
String apiPostData = "POST /api/plugin/psucontrol HTTP/1.1";
|
||||||
String apiPostBody = "{\"command\":\"getPSUState\"}";
|
String apiPostBody = "{\"command\":\"getPSUState\"}";
|
||||||
WiFiClient printClient = getPostRequest(apiPostData,apiPostBody);
|
WiFiClient printClient = getPostRequest(apiPostData, apiPostBody);
|
||||||
if (printerData.error != "") {
|
if (printerData.error != "")
|
||||||
|
{
|
||||||
printerData.isPSUoff = false; // we do not know PSU state, so assume on.
|
printerData.isPSUoff = false; // we do not know PSU state, so assume on.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const size_t bufferSize3 = JSON_OBJECT_SIZE(2) + 300;
|
const size_t bufferSize3 = JSON_OBJECT_SIZE(2) + 300;
|
||||||
DynamicJsonBuffer jsonBuffer3(bufferSize3);
|
DynamicJsonBuffer jsonBuffer3(bufferSize3);
|
||||||
|
|
||||||
// Parse JSON object
|
// Parse JSON object
|
||||||
JsonObject& root3 = jsonBuffer3.parseObject(printClient);
|
JsonObject &root3 = jsonBuffer3.parseObject(printClient);
|
||||||
if (!root3.success()) {
|
if (!root3.success())
|
||||||
|
{
|
||||||
printerData.isPSUoff = false; // we do not know PSU state, so assume on
|
printerData.isPSUoff = false; // we do not know PSU state, so assume on
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String psu = (const char*)root3["isPSUOn"];
|
String psu = (const char *)root3["isPSUOn"];
|
||||||
if (psu == "true") {
|
if (psu == "true")
|
||||||
|
{
|
||||||
printerData.isPSUoff = false; // PSU checked and is on
|
printerData.isPSUoff = false; // PSU checked and is on
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
printerData.isPSUoff = true; // PSU checked and is off, set flag
|
printerData.isPSUoff = true; // PSU checked and is off, set flag
|
||||||
}
|
}
|
||||||
printClient.stop(); //stop client
|
printClient.stop(); //stop client
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
printerData.isPSUoff = false; // we are not checking PSU state, so assume on
|
printerData.isPSUoff = false; // we are not checking PSU state, so assume on
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctoPrintClient::getTemperaturePresets()
|
void OctoPrintClient::updateTemperaturePresets()
|
||||||
{
|
{
|
||||||
if (!validate())
|
if (!validate())
|
||||||
{
|
{
|
||||||
|
|
@ -302,6 +397,8 @@ void OctoPrintClient::getTemperaturePresets()
|
||||||
const size_t bufferSize3 = JSON_ARRAY_SIZE(4) + JSON_OBJECT_SIZE(1) + 20 * JSON_OBJECT_SIZE(4) + 245;
|
const size_t bufferSize3 = JSON_ARRAY_SIZE(4) + JSON_OBJECT_SIZE(1) + 20 * JSON_OBJECT_SIZE(4) + 245;
|
||||||
DynamicJsonBuffer jsonBuffer3(bufferSize3);
|
DynamicJsonBuffer jsonBuffer3(bufferSize3);
|
||||||
|
|
||||||
|
temperaturePresets.clear();
|
||||||
|
|
||||||
printClient.find("\"temperature\": ");
|
printClient.find("\"temperature\": ");
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
|
@ -313,8 +410,6 @@ void OctoPrintClient::getTemperaturePresets()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
temperaturePresets.clear();
|
|
||||||
|
|
||||||
JsonArray &temperature_profiles = root3["profiles"];
|
JsonArray &temperature_profiles = root3["profiles"];
|
||||||
|
|
||||||
for (int i = 0; i < temperature_profiles.size(); i++)
|
for (int i = 0; i < temperature_profiles.size(); i++)
|
||||||
|
|
@ -326,6 +421,8 @@ void OctoPrintClient::getTemperaturePresets()
|
||||||
preset->extruder = temperature_profiles[i]["extruder"];
|
preset->extruder = temperature_profiles[i]["extruder"];
|
||||||
|
|
||||||
preset->PresetName = temperature_profiles[i]["name"].as<String>();
|
preset->PresetName = temperature_profiles[i]["name"].as<String>();
|
||||||
|
|
||||||
|
temperaturePresets.add(preset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (printClient.findUntil(",", "]"));
|
} while (printClient.findUntil(",", "]"));
|
||||||
|
|
@ -334,7 +431,8 @@ void OctoPrintClient::getTemperaturePresets()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset all PrinterData
|
// Reset all PrinterData
|
||||||
void OctoPrintClient::resetPrintData() {
|
void OctoPrintClient::resetPrintData()
|
||||||
|
{
|
||||||
printerData.averagePrintTime = "";
|
printerData.averagePrintTime = "";
|
||||||
printerData.estimatedPrintTime = "";
|
printerData.estimatedPrintTime = "";
|
||||||
printerData.fileName = "";
|
printerData.fileName = "";
|
||||||
|
|
@ -355,108 +453,134 @@ void OctoPrintClient::resetPrintData() {
|
||||||
printerData.error = "";
|
printerData.error = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getAveragePrintTime(){
|
String OctoPrintClient::getAveragePrintTime()
|
||||||
|
{
|
||||||
return printerData.averagePrintTime;
|
return printerData.averagePrintTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getEstimatedPrintTime() {
|
String OctoPrintClient::getEstimatedPrintTime()
|
||||||
|
{
|
||||||
return printerData.estimatedPrintTime;
|
return printerData.estimatedPrintTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getFileName() {
|
String OctoPrintClient::getFileName()
|
||||||
|
{
|
||||||
return printerData.fileName;
|
return printerData.fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getFileSize() {
|
String OctoPrintClient::getFileSize()
|
||||||
|
{
|
||||||
return printerData.fileSize;
|
return printerData.fileSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getLastPrintTime(){
|
String OctoPrintClient::getLastPrintTime()
|
||||||
|
{
|
||||||
return printerData.lastPrintTime;
|
return printerData.lastPrintTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getProgressCompletion() {
|
String OctoPrintClient::getProgressCompletion()
|
||||||
|
{
|
||||||
return String(printerData.progressCompletion.toInt());
|
return String(printerData.progressCompletion.toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getProgressFilepos() {
|
String OctoPrintClient::getProgressFilepos()
|
||||||
return printerData.progressFilepos;
|
{
|
||||||
|
return printerData.progressFilepos;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getProgressPrintTime() {
|
String OctoPrintClient::getProgressPrintTime()
|
||||||
|
{
|
||||||
return printerData.progressPrintTime;
|
return printerData.progressPrintTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getProgressPrintTimeLeft() {
|
String OctoPrintClient::getProgressPrintTimeLeft()
|
||||||
|
{
|
||||||
String rtnValue = printerData.progressPrintTimeLeft;
|
String rtnValue = printerData.progressPrintTimeLeft;
|
||||||
if (getProgressCompletion() == "100") {
|
if (getProgressCompletion() == "100")
|
||||||
|
{
|
||||||
rtnValue = "0"; // Print is done so this should be 0 this is a fix for OctoPrint
|
rtnValue = "0"; // Print is done so this should be 0 this is a fix for OctoPrint
|
||||||
}
|
}
|
||||||
return rtnValue;
|
return rtnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getState() {
|
String OctoPrintClient::getState()
|
||||||
|
{
|
||||||
return printerData.state;
|
return printerData.state;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean OctoPrintClient::isPrinting() {
|
boolean OctoPrintClient::isPrinting()
|
||||||
|
{
|
||||||
return printerData.isPrinting;
|
return printerData.isPrinting;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean OctoPrintClient::isPSUoff() {
|
boolean OctoPrintClient::isPSUoff()
|
||||||
|
{
|
||||||
return printerData.isPSUoff;
|
return printerData.isPSUoff;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean OctoPrintClient::isOperational() {
|
boolean OctoPrintClient::isOperational()
|
||||||
|
{
|
||||||
boolean operational = false;
|
boolean operational = false;
|
||||||
if (printerData.state == "Operational" || isPrinting()) {
|
if (printerData.state == "Operational" || isPrinting())
|
||||||
|
{
|
||||||
operational = true;
|
operational = true;
|
||||||
}
|
}
|
||||||
return operational;
|
return operational;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getTempBedActual() {
|
String OctoPrintClient::getTempBedActual()
|
||||||
|
{
|
||||||
return printerData.bedTemp;
|
return printerData.bedTemp;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getTempBedTarget() {
|
String OctoPrintClient::getTempBedTarget()
|
||||||
|
{
|
||||||
return printerData.bedTargetTemp;
|
return printerData.bedTargetTemp;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getTempToolActual() {
|
String OctoPrintClient::getTempToolActual()
|
||||||
|
{
|
||||||
return printerData.toolTemp;
|
return printerData.toolTemp;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getTempToolTarget() {
|
String OctoPrintClient::getTempToolTarget()
|
||||||
|
{
|
||||||
return printerData.toolTargetTemp;
|
return printerData.toolTargetTemp;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getFilamentLength() {
|
String OctoPrintClient::getFilamentLength()
|
||||||
|
{
|
||||||
return printerData.filamentLength;
|
return printerData.filamentLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getError() {
|
String OctoPrintClient::getError()
|
||||||
|
{
|
||||||
return printerData.error;
|
return printerData.error;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getValueRounded(String value) {
|
String OctoPrintClient::getValueRounded(String value)
|
||||||
|
{
|
||||||
float f = value.toFloat();
|
float f = value.toFloat();
|
||||||
int rounded = (int)(f+0.5f);
|
int rounded = (int)(f + 0.5f);
|
||||||
return String(rounded);
|
return String(rounded);
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getPrinterType() {
|
String OctoPrintClient::getPrinterType()
|
||||||
|
{
|
||||||
return printerType;
|
return printerType;
|
||||||
}
|
}
|
||||||
|
|
||||||
int OctoPrintClient::getPrinterPort() {
|
int OctoPrintClient::getPrinterPort()
|
||||||
|
{
|
||||||
return myPort;
|
return myPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
String OctoPrintClient::getPrinterName() {
|
String OctoPrintClient::getPrinterName()
|
||||||
|
{
|
||||||
return printerData.printerName;
|
return printerData.printerName;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctoPrintClient::setPrinterName(String printer) {
|
void OctoPrintClient::setPrinterName(String printer)
|
||||||
|
{
|
||||||
printerData.printerName = printer;
|
printerData.printerName = printer;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -77,10 +77,13 @@ public:
|
||||||
OctoPrintClient(String ApiKey, String server, int port, String user, String pass, boolean psu);
|
OctoPrintClient(String ApiKey, String server, int port, String user, String pass, boolean psu);
|
||||||
void getPrinterJobResults();
|
void getPrinterJobResults();
|
||||||
void getPrinterPsuState();
|
void getPrinterPsuState();
|
||||||
|
void preheatTool(int toolIndex, int temperature);
|
||||||
|
void preheatBed(int temperature);
|
||||||
|
void preheatChamber (int temperature);
|
||||||
void updatePrintClient(String ApiKey, String server, int port, String user, String pass, boolean psu);
|
void updatePrintClient(String ApiKey, String server, int port, String user, String pass, boolean psu);
|
||||||
void getTemperaturePresets();
|
void updateTemperaturePresets();
|
||||||
|
|
||||||
LinkedList<TemperaturePreset *> temperaturePresets;
|
LinkedList<TemperaturePreset *> temperaturePresets;
|
||||||
|
|
||||||
String getAveragePrintTime();
|
String getAveragePrintTime();
|
||||||
String getEstimatedPrintTime();
|
String getEstimatedPrintTime();
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,8 @@ SOFTWARE.
|
||||||
#include "OLEDDisplayUi.h"
|
#include "OLEDDisplayUi.h"
|
||||||
#include "libs/Keypad_tw/Keypad_tw.h"
|
#include "libs/Keypad_tw/Keypad_tw.h"
|
||||||
#include "Menu/Menu.h"
|
#include "Menu/Menu.h"
|
||||||
|
#include "Menu/PreheatMenu.h"
|
||||||
|
#include "Menu/CooldownMenu.h"
|
||||||
|
|
||||||
#define KEYPAD_I2CADDR 0x27 // keypad on PCF8574A
|
#define KEYPAD_I2CADDR 0x27 // keypad on PCF8574A
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
class TemperaturePreset
|
class TemperaturePreset
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,9 @@ FrameCallback clockFrame[2];
|
||||||
FrameCallback menuFrame[1];
|
FrameCallback menuFrame[1];
|
||||||
boolean isClockOn = false;
|
boolean isClockOn = false;
|
||||||
|
|
||||||
Menu* temperatureMenu;
|
PreheatMenu* preheatMenu;
|
||||||
|
CooldownMenu* cooldownMenu;
|
||||||
|
|
||||||
Menu* activeMenu;
|
Menu* activeMenu;
|
||||||
OverlayCallback overlays[] = {drawHeaderOverlay};
|
OverlayCallback overlays[] = {drawHeaderOverlay};
|
||||||
OverlayCallback clockOverlay[] = {drawClockHeaderOverlay};
|
OverlayCallback clockOverlay[] = {drawClockHeaderOverlay};
|
||||||
|
|
@ -278,15 +280,11 @@ void setup()
|
||||||
menuFrame[0] = drawMenu;
|
menuFrame[0] = drawMenu;
|
||||||
ui.setOverlays(overlays, numberOfOverlays);
|
ui.setOverlays(overlays, numberOfOverlays);
|
||||||
|
|
||||||
temperatureMenu = new Menu("Preheat Menu");
|
preheatMenu = new PreheatMenu();
|
||||||
temperatureMenu->menuItems.add(new MenuItem("LangesFilament"));
|
preheatMenu->client = &printerClient;
|
||||||
temperatureMenu->menuItems.add(new MenuItem("ABS"));
|
|
||||||
temperatureMenu->menuItems.add(new MenuItem("PET"));
|
|
||||||
temperatureMenu->menuItems.add(new MenuItem("PLA"));
|
|
||||||
|
|
||||||
temperatureMenu->menuItems.add(new MenuItem("Dingsda"));
|
cooldownMenu = new CooldownMenu();
|
||||||
|
cooldownMenu->client = &printerClient;
|
||||||
displayMenu(temperatureMenu);
|
|
||||||
|
|
||||||
// Inital UI takes care of initalising the display too.
|
// Inital UI takes care of initalising the display too.
|
||||||
ui.init();
|
ui.init();
|
||||||
|
|
@ -415,10 +413,12 @@ void menuExitCallback () {
|
||||||
}
|
}
|
||||||
|
|
||||||
void displayMenu (Menu *menu) {
|
void displayMenu (Menu *menu) {
|
||||||
printerClient.getTemperaturePresets();
|
|
||||||
Serial.println("Display Menu");
|
Serial.println("Display Menu");
|
||||||
menu->displayMillis = millis();
|
menu->displayMillis = millis();
|
||||||
menu->exitCallback = menuExitCallback;
|
menu->exitCallback = menuExitCallback;
|
||||||
|
menu->startPage = 0;
|
||||||
|
menu->beforeShow();
|
||||||
activeMenu = menu;
|
activeMenu = menu;
|
||||||
}
|
}
|
||||||
//************************************************************
|
//************************************************************
|
||||||
|
|
@ -439,7 +439,10 @@ void loop()
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case 'A':
|
case 'A':
|
||||||
displayMenu(temperatureMenu);
|
displayMenu(preheatMenu);
|
||||||
|
break;
|
||||||
|
case 'B':
|
||||||
|
displayMenu(cooldownMenu);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -458,6 +461,7 @@ void loop()
|
||||||
lastMinute = timeClient.getMinutes(); // reset the check value
|
lastMinute = timeClient.getMinutes(); // reset the check value
|
||||||
printerClient.getPrinterJobResults();
|
printerClient.getPrinterJobResults();
|
||||||
printerClient.getPrinterPsuState();
|
printerClient.getPrinterPsuState();
|
||||||
|
printerClient.updateTemperaturePresets();
|
||||||
ledOnOff(false);
|
ledOnOff(false);
|
||||||
}
|
}
|
||||||
else if (printerClient.isPrinting())
|
else if (printerClient.isPrinting())
|
||||||
|
|
@ -581,6 +585,7 @@ void handleUpdateConfig()
|
||||||
findMDNS();
|
findMDNS();
|
||||||
printerClient.getPrinterJobResults();
|
printerClient.getPrinterJobResults();
|
||||||
printerClient.getPrinterPsuState();
|
printerClient.getPrinterPsuState();
|
||||||
|
printerClient.updateTemperaturePresets();
|
||||||
if (INVERT_DISPLAY != flipOld)
|
if (INVERT_DISPLAY != flipOld)
|
||||||
{
|
{
|
||||||
ui.init();
|
ui.init();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue