diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dff1ca8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +printermonitor/my_Settings.h diff --git a/README.md b/README.md index ebf24fc..803273b 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,9 @@ SOFTWARE. ## Required Parts: * Wemos D1 Mini: https://amzn.to/2ImqD1n * 0.96" OLED I2C 128x64 Display (12864) SSD1306: https://amzn.to/2InSNF0 -* (optional) 1.3" I2C OLED Display: https://amzn.to/2IP0gRU (must uncomment #define DISPLAY_SH1106 in the Settings.h to use the 1.3" SSH1106 display) +* (optional) 1.3" I2C OLED Display: https://amzn.to/2IP0gRU (must uncomment #define DISPLAY_SH1106 in the Settings.h to use the 1.3" SSH1106 display) + +Note: Using the links provided here help to support these types of projects. Thank you for the support. ## Wiring for the Wemos D1 Mini to the I2C SSD1306 OLED SDA -> D2 @@ -100,6 +102,11 @@ used to open a browser to the Web Interface. **Everything** can be configured t

+## Donate or Tip +Please do not feel obligated, but donations and tips are warmly welcomed. I have added the donation button at the request of a few people that wanted to contribute and show appreciation. Thank you, and enjoy the application and project. + +[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6VPMTLASLSKWE) + ## Contributors David Payne Daniel Eichhorn -- Author of the TimeClient class and OLEDDisplayUi . diff --git a/printermonitor/Settings.h b/printermonitor/Settings.h index 170b1da..dfa100e 100644 --- a/printermonitor/Settings.h +++ b/printermonitor/Settings.h @@ -70,7 +70,6 @@ boolean IS_METRIC = false; // false = Imperial and true = Metric const int WEBSERVER_PORT = 80; // The port you can access this device on over HTTP const boolean WEBSERVER_ENABLED = true; // Device will provide a web interface via http://[ip]:[port]/ -boolean IS_BASIC_AUTH = true; // true = require athentication to change configuration settings / false = no auth char* www_username = "admin"; // User account for the Web Interface char* www_password = "password"; // Password for the Web Interface float UtcOffset = -7; // Hour offset from GMT for your timezone @@ -82,7 +81,7 @@ boolean DISPLAYCLOCK = true; // true = Show Clock when not printing / false = const int I2C_DISPLAY_ADDRESS = 0x3c; // I2C Address of your Display (usually 0x3c or 0x3d) const int SDA_PIN = D2; const int SCL_PIN = D5; -const boolean INVERT_DISPLAY = false; // true = pins at top | false = pins at the bottom +boolean INVERT_DISPLAY = false; // true = pins at top | false = pins at the bottom //#define DISPLAY_SH1106 // Uncomment this line to use the SH1106 display -- SSD1306 is used by default and is most common boolean ENABLE_OTA = true; // this will allow you to load firmware to the device over WiFi (see OTA for ESP8266) @@ -91,4 +90,4 @@ String OTA_Password = ""; // Set an OTA password here -- leave blank if you // End Settings //****************************** -String themeColor = "light-green"; // this can be changed later in the web interface. +String themeColor = "light-green"; // this can be changed later in the web interface. diff --git a/printermonitor/printermonitor.ino b/printermonitor/printermonitor.ino index f786205..f827286 100644 --- a/printermonitor/printermonitor.ino +++ b/printermonitor/printermonitor.ino @@ -1,4 +1,4 @@ - /** The MIT License (MIT) +/** The MIT License (MIT) Copyright (c) 2018 David Payne @@ -112,10 +112,10 @@ String CHANGE_FORM = "
Display Clock when printer is off

" "

Use 24 Hour Clock (military time)

" + "

Flip display?

" "

Clock Sync / Weather Refresh (minutes)

" "

Theme Color

" "


" - " Use Security Credentials for Configuration Changes" "

" "

" "
"; @@ -374,15 +374,8 @@ void getUpdateTime() { digitalWrite(externalLight, HIGH); // turn off the LED } -boolean authentication() { - if (IS_BASIC_AUTH && (strlen(www_username) >= 1 && strlen(www_password) >= 1)) { - return server.authenticate(www_username, www_password); - } - return true; // Authentication not required -} - void handleSystemReset() { - if (!authentication()) { + if (!server.authenticate(www_username, www_password)) { return server.requestAuthentication(); } Serial.println("Reset System Configuration"); @@ -393,7 +386,7 @@ void handleSystemReset() { } void handleUpdateWeather() { - if (!authentication()) { + if (!server.authenticate(www_username, www_password)) { return server.requestAuthentication(); } DISPLAYWEATHER = server.hasArg("isWeatherEnabled"); @@ -408,7 +401,8 @@ void handleUpdateWeather() { } void handleUpdateConfig() { - if (!authentication()) { + boolean flipOld = INVERT_DISPLAY; + if (!server.authenticate(www_username, www_password)) { return server.requestAuthentication(); } OctoPrintApiKey = server.arg("octoPrintApiKey"); @@ -419,10 +413,10 @@ void handleUpdateConfig() { OctoAuthPass = server.arg("octoPass"); DISPLAYCLOCK = server.hasArg("isClockEnabled"); IS_24HOUR = server.hasArg("is24hour"); + INVERT_DISPLAY = server.hasArg("invDisp"); minutesBetweenDataRefresh = server.arg("refresh").toInt(); themeColor = server.arg("theme"); UtcOffset = server.arg("utcoffset").toFloat(); - IS_BASIC_AUTH = server.hasArg("isBasicAuth"); String temp = server.arg("userid"); temp.toCharArray(www_username, sizeof(temp)); temp = server.arg("stationpassword"); @@ -430,13 +424,19 @@ void handleUpdateConfig() { writeSettings(); findMDNS(); printerClient.getPrinterJobResults(); + if (INVERT_DISPLAY != flipOld) { + ui.init(); + if(INVERT_DISPLAY) + display.flipScreenVertically(); + ui.update(); + } checkDisplay(); lastEpoch = 0; redirectHome(); } void handleWifiReset() { - if (!authentication()) { + if (!server.authenticate(www_username, www_password)) { return server.requestAuthentication(); } //WiFiManager @@ -448,7 +448,7 @@ void handleWifiReset() { } void handleWeatherConfigure() { - if (!authentication()) { + if (!server.authenticate(www_username, www_password)) { return server.requestAuthentication(); } digitalWrite(externalLight, LOW); @@ -488,7 +488,7 @@ void handleWeatherConfigure() { } void handleConfigure() { - if (!authentication()) { + if (!server.authenticate(www_username, www_password)) { return server.requestAuthentication(); } digitalWrite(externalLight, LOW); @@ -521,6 +521,11 @@ void handleConfigure() { is24hourChecked = "checked='checked'"; } form.replace("%IS_24HOUR_CHECKED%", is24hourChecked); + String isInvDisp = ""; + if (INVERT_DISPLAY) { + isInvDisp = "checked='checked'"; + } + form.replace("%IS_INVDISP_CHECKED%", isInvDisp); String options = ""; options.replace(">"+String(minutesBetweenDataRefresh)+"<", " selected>"+String(minutesBetweenDataRefresh)+"<"); form.replace("%OPTIONS%", options); @@ -528,11 +533,6 @@ void handleConfigure() { themeOptions.replace(">"+String(themeColor)+"<", " selected>"+String(themeColor)+"<"); form.replace("%THEME_OPTIONS%", themeOptions); form.replace("%UTCOFFSET%", String(UtcOffset)); - String isUseSecurityChecked = ""; - if (IS_BASIC_AUTH) { - isUseSecurityChecked = "checked='checked'"; - } - form.replace("%IS_BASICAUTH_CHECKED%", isUseSecurityChecked); form.replace("%USERID%", String(www_username)); form.replace("%STATIONPASSWORD%", String(www_password)); @@ -947,11 +947,11 @@ void writeSettings() { f.println("octoPass=" + OctoAuthPass); f.println("refreshRate=" + String(minutesBetweenDataRefresh)); f.println("themeColor=" + themeColor); - f.println("IS_BASIC_AUTH=" + String(IS_BASIC_AUTH)); f.println("www_username=" + String(www_username)); f.println("www_password=" + String(www_password)); f.println("DISPLAYCLOCK=" + String(DISPLAYCLOCK)); f.println("is24hour=" + String(IS_24HOUR)); + f.println("invertDisp=" + String(INVERT_DISPLAY)); f.println("isWeather=" + String(DISPLAYWEATHER)); f.println("weatherKey=" + WeatherApiKey); f.println("CityID=" + String(CityIDs[0])); @@ -1015,10 +1015,6 @@ void readSettings() { themeColor.trim(); Serial.println("themeColor=" + themeColor); } - if (line.indexOf("IS_BASIC_AUTH=") >= 0) { - IS_BASIC_AUTH = line.substring(line.lastIndexOf("IS_BASIC_AUTH=") + 14).toInt(); - Serial.println("IS_BASIC_AUTH=" + String(IS_BASIC_AUTH)); - } if (line.indexOf("www_username=") >= 0) { String temp = line.substring(line.lastIndexOf("www_username=") + 13); temp.trim(); @@ -1039,6 +1035,10 @@ void readSettings() { IS_24HOUR = line.substring(line.lastIndexOf("is24hour=") + 9).toInt(); Serial.println("IS_24HOUR=" + String(IS_24HOUR)); } + if(line.indexOf("invertDisp=") >= 0) { + INVERT_DISPLAY = line.substring(line.lastIndexOf("invertDisp=") + 11).toInt(); + Serial.println("INVERT_DISPLAY=" + String(INVERT_DISPLAY)); + } if (line.indexOf("isWeather=") >= 0) { DISPLAYWEATHER = line.substring(line.lastIndexOf("isWeather=") + 10).toInt(); Serial.println("DISPLAYWEATHER=" + String(DISPLAYWEATHER)); @@ -1148,4 +1148,4 @@ void enableDisplay(boolean enable) { Serial.println("Display was turned OFF: " + timeClient.getFormattedTime()); displayOffEpoch = lastEpoch; } -} +}