diff --git a/LichtWecker/Alarm.ino b/LichtWecker/Alarm.ino index b9076e6..977007d 100644 --- a/LichtWecker/Alarm.ino +++ b/LichtWecker/Alarm.ino @@ -1,7 +1,7 @@ void run_alarm(long currentMillis){ if (test_alarm()) { - Serial.println("Start Alarm"); + write_log("Start Alarm"); start_wake_light(currentMillis); setAlarmTimer(15); } @@ -12,7 +12,7 @@ void run_alarm(long currentMillis){ } //Test if Summer->Winter time change (this should also change the Alarm times!) bool dst = summertime_EU(y,M,d,h,1); - //Serial.println(String(dst) + ":" + String(summer)); + //write_log(String(dst) + ":" + String(summer)); if (dst != summer) { summer = dst; @@ -23,7 +23,7 @@ void run_alarm(long currentMillis){ } void stop_alarm(){ - Serial.println("Stop Alarm"); + write_log("Stop Alarm"); stop_wake_light(); stop_alarm_beep(); setAlarmTimer(0); @@ -188,7 +188,7 @@ void set_alarm1(){ byte A1Day, A1Hour, A1Minute, A1Second, AlarmBits; bool A1Dy, A1h12, A1PM; Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, AlarmBits, A1Dy, A1h12, A1PM); - Serial.println("Alarm1 Set:" + String(A1Day) + ", " + String(A1Hour) + ", " + String(A1Minute) + ", " + String(A1Second) + ", " + String(AlarmBits) + ", " + String(A1Dy) + ", " + String(A1h12) + ", "); + write_log("Alarm1 Set:" + String(A1Day) + ", " + String(A1Hour) + ", " + String(A1Minute) + ", " + String(A1Second) + ", " + String(AlarmBits) + ", " + String(A1Dy) + ", " + String(A1h12) + ", "); //display_text("Alarm 1", String(A1Hour) + ":" +String(A1Minute)); //delay_gui(1000); } @@ -208,7 +208,7 @@ void set_alarm2(){ byte A1Day, A1Hour, A1Minute, AlarmBits; bool A1Dy, A1h12, A1PM; Clock.getA2Time(A1Day, A1Hour, A1Minute, AlarmBits, A1Dy, A1h12, A1PM); - Serial.println("Alarm2 Set:" + String(A1Day) + ", " + String(A1Hour) + ", " + String(A1Minute) + ", " + String(AlarmBits) + ", " + String(A1Dy) + ", " + String(A1h12) + ", "); + write_log("Alarm2 Set:" + String(A1Day) + ", " + String(A1Hour) + ", " + String(A1Minute) + ", " + String(AlarmBits) + ", " + String(A1Dy) + ", " + String(A1h12) + ", "); //display_text("Alarm 2", String(A1Hour) + ":" +String(A1Minute)); //delay_gui(1000); } diff --git a/LichtWecker/LichtWecker.ino b/LichtWecker/LichtWecker.ino index 60246d4..3f69e4f 100644 --- a/LichtWecker/LichtWecker.ino +++ b/LichtWecker/LichtWecker.ino @@ -15,6 +15,12 @@ #include //https://github.com/SensorsIot/NTPtimeESP #include +String Hardware = "0.10"; +String Software = "0.05"; + +// Set web server port number to 80 +ESP8266WebServer server(80); + //LED Band Setup #define FASTLED_ESP8266_RAW_PIN_ORDER #include "FastLED.h" @@ -48,6 +54,8 @@ const int outBeep = 9; //To know if connected to wifi or not: bool wifi_connected = false; +bool ntp_update = true; + //For Summertime change notification (change alarmtime) this should be saved in the EEPROM! bool summer = false; @@ -84,7 +92,7 @@ long previousMillis = 0; void configModeCallback (WiFiManager *myWiFiManager) { //if you used auto generated SSID, print it - //Serial.println(myWiFiManager->getConfigPortalSSID()); + //write_log(myWiFiManager->getConfigPortalSSID()); display_text("Wifi: Licht","PW: Wecker"); } @@ -159,9 +167,9 @@ void setup() { delay(5000); } if (wifiManager.autoConnect("Licht", "Wecker")){ - Serial.println("WiFi connected"); - Serial.print("IP address: "); - Serial.println(WiFi.localIP()); + write_log("WiFi connected"); + write_log("IP address: "); + write_log(WiFi.localIP().toString()); wifi_connected = true; display_text("IP address",WiFi.localIP().toString()); delay(5000); @@ -169,9 +177,9 @@ void setup() { else{ WiFi.mode(WIFI_OFF); } - display_text("Licht Wecker","SW: 0.04"); + display_text("Licht Wecker","SW: " + Software); delay(1000); - display_text("Licht Wecker","HW: 0.10"); + display_text("Licht Wecker","HW: " + Hardware); delay(1000); display_text("Licht Wecker",""); @@ -193,7 +201,7 @@ void setup() { al1h = A1Hour; } al1m = A1Minute; - Serial.println("Alarm1 Set:" + String(A1Day) + ", " + String(A1Hour) + ", " + String(A1Minute) + ", " + String(AlarmBits) + ", " + String(A1Dy) + ", " + String(A1h12) + ", "); + write_log("Alarm1 Set:" + String(A1Day) + ", " + String(A1Hour) + ", " + String(A1Minute) + ", " + String(AlarmBits) + ", " + String(A1Dy) + ", " + String(A1h12) + ", "); Clock.getA2Time(A1Day, A1Hour, A1Minute, AlarmBits, A1Dy, A1h12, A1PM); if (summer) @@ -204,7 +212,7 @@ void setup() { al2h = A1Hour; } al2m = A1Minute; - Serial.println("Alarm2 Set:" + String(A1Day) + ", " + String(A1Hour) + ", " + String(A1Minute) + ", " + String(AlarmBits) + ", " + String(A1Dy) + ", " + String(A1h12) + ", "); + write_log("Alarm2 Set:" + String(A1Day) + ", " + String(A1Hour) + ", " + String(A1Minute) + ", " + String(AlarmBits) + ", " + String(A1Dy) + ", " + String(A1h12) + ", "); show_green(); update_time_from_web(); @@ -223,25 +231,27 @@ void setup() { ArduinoOTA.setHostname(NodeName.c_str()); ArduinoOTA.onStart([]() { - Serial.println("Start"); + write_log("Start"); }); ArduinoOTA.onEnd([]() { - Serial.println("\nEnd"); + write_log("\nEnd"); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - Serial.printf("Progress: %u%%\r", (progress / (total / 100))); + write_log("Progress: " + String(progress / (total / 100))); }); ArduinoOTA.onError([](ota_error_t error) { - Serial.printf("Error[%u]: ", error); - if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); - else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); - else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); - else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed"); - else if (error == OTA_END_ERROR) Serial.println("End Failed"); + write_log("Error: " + String(error)); + if (error == OTA_AUTH_ERROR) write_log("Auth Failed"); + else if (error == OTA_BEGIN_ERROR) write_log("Begin Failed"); + else if (error == OTA_CONNECT_ERROR) write_log("Connect Failed"); + else if (error == OTA_RECEIVE_ERROR) write_log("Receive Failed"); + else if (error == OTA_END_ERROR) write_log("End Failed"); }); ArduinoOTA.begin(); //------------------------------------------------- update_time_from_web(); + + setup_webserver(); } @@ -249,7 +259,7 @@ void loop() { //OTA ArduinoOTA.handle(); //OTA - + handle_webserver(); unsigned long currentMillis = millis(); unsigned long intervall = currentMillis - previousMillis; diff --git a/LichtWecker/Uhr.ino b/LichtWecker/Uhr.ino index d9c0389..c2d0367 100644 --- a/LichtWecker/Uhr.ino +++ b/LichtWecker/Uhr.ino @@ -111,7 +111,7 @@ void update_Time(){ } dow = daysOfTheWeek[Clock.getDoW()]; - //Serial.println(String(h) + ":" + String(m) + ":" + String(s) + " - " + String(d) + "." + String(M) + "." + String(y) + " | DST: " + String(summertime_EU(y,M,d,h,1))); + //write_log(String(h) + ":" + String(m) + ":" + String(s) + " - " + String(d) + "." + String(M) + "." + String(y) + " | DST: " + String(summertime_EU(y,M,d,h,1))); } //################################################################################################################################### diff --git a/LichtWecker/beeper.ino b/LichtWecker/beeper.ino index 659d387..c873ec4 100644 --- a/LichtWecker/beeper.ino +++ b/LichtWecker/beeper.ino @@ -28,7 +28,7 @@ void toggle_alarm_beep(){ void beepOff(){ int currentState = digitalRead(outBeep); if (currentState != LOW){ - Serial.println("ALARM"); + //write_log("ALARM"); digitalWrite(outBeep, LOW); } } @@ -36,7 +36,7 @@ void beepOff(){ void beepOn(){ int currentState = digitalRead(outBeep); if (currentState != HIGH){ - Serial.println("ALARM"); + //write_log("ALARM"); digitalWrite(outBeep, HIGH); } } diff --git a/LichtWecker/display.ino b/LichtWecker/display.ino index d3f7391..1c310c9 100644 --- a/LichtWecker/display.ino +++ b/LichtWecker/display.ino @@ -3,14 +3,14 @@ String current_string = ""; void display_text(String text1, String text2){ if (current_string != text1 + text2){ - //Serial.println("Display:"); + //write_log("Display:"); lcd.clear(); lcd.setCursor(freespace(text1), 0); lcd.print(text1); - //Serial.println(text1); + //write_log(text1); lcd.setCursor(freespace(text2), 1); lcd.print(text2); - //Serial.println(text2); + //write_log(text2); //ledMatrix.clear(); //ledMatrix.setText(text); //ledMatrix.drawText(); diff --git a/LichtWecker/eeprom.ino b/LichtWecker/eeprom.ino index c9edd15..d1ae954 100644 --- a/LichtWecker/eeprom.ino +++ b/LichtWecker/eeprom.ino @@ -4,13 +4,16 @@ uint addr = 0; struct { bool summertime = false; + bool ntp_update = true; } data; void write_eeprom(){ EEPROM.begin(512); // load EEPROM data into RAM, see it data.summertime = summer; - Serial.println("Writing to EEPROM: "+String(data.summertime)); + data.ntp_update = ntp_update; + write_log("Writing to EEPROM: "+String(data.summertime)); + write_log("Writing to EEPROM: "+String(data.ntp_update)); // replace values in EEPROM EEPROM.put(addr,data); EEPROM.commit(); @@ -20,8 +23,10 @@ void write_eeprom(){ bool get_eeprom(){ EEPROM.begin(512); EEPROM.get(addr,data); - Serial.println("Found: "+String(data.summertime)); + write_log("Found: "+String(data.summertime)); + write_log("Found: "+String(data.ntp_update)); EEPROM.end(); summer = data.summertime; + ntp_update = data.ntp_update; } diff --git a/LichtWecker/light.ino b/LichtWecker/light.ino index d6f05ec..7a51538 100644 --- a/LichtWecker/light.ino +++ b/LichtWecker/light.ino @@ -7,7 +7,7 @@ void show_white(){ leds[i] = CRGB::White; } FastLED.show(); - Serial.println("Light: WHITE"); + write_log("Light: WHITE"); } //Show LED Colors @@ -19,7 +19,7 @@ void show_black(){ leds[i] = CRGB::Black; } FastLED.show(); - //Serial.println("Light: BLACK"); + //write_log("Light: BLACK"); } //Show LED Colors @@ -31,7 +31,7 @@ void show_green(){ leds[i] = CRGB::Green; } FastLED.show(); - Serial.println("Light: GREEN"); + write_log("Light: GREEN"); } void set_color(int r, int g, int b){ @@ -41,10 +41,10 @@ void set_color(int r, int g, int b){ leds[i].setRGB( r, g, b); } FastLED.show(); - Serial.println("Light: "); - Serial.println(r); - Serial.println(b); - Serial.println(g); + //write_log("Light: "); + //write_log(String(r)); + //write_log(String(b)); + //write_log(String(g)); } bool run_wake_up(long currentMillis){ diff --git a/LichtWecker/ntp.ino b/LichtWecker/ntp.ino index e27fa0e..307b6c0 100644 --- a/LichtWecker/ntp.ino +++ b/LichtWecker/ntp.ino @@ -1,7 +1,7 @@ //Code to update time from the web void update_time_from_web(){ - //Serial.println(wifi_connected); - if (wifi_connected == true) + //write_log(wifi_connected); + if (wifi_connected == true && ntp_update == true) { strDateTime dateTime; // first parameter: Time zone in floating point (for India); second parameter: 1 for European summer time; 2 for US daylight saving time; 0 for no DST adjustment; (contributed by viewwer, not tested by me) @@ -25,7 +25,8 @@ void update_time_from_web(){ M = actualMonth; d = actualday; set_clock(); - Serial.println("Time Updated!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + write_log("Time Updated!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + write_log(String(h) + ":" + String(m) + " - " + String(d) + "." + String(M) + "." + String(y)); display_text("Update Time",""); delay_gui(1000); } diff --git a/LichtWecker/webserver.ino b/LichtWecker/webserver.ino new file mode 100644 index 0000000..650c301 --- /dev/null +++ b/LichtWecker/webserver.ino @@ -0,0 +1,117 @@ +String logfile = ""; + +void setup_webserver(){ + server.on("/log", []() { //Define the handling function for the path + + server.send(200, "text/plain", logfile); + + }); + + server.on("/", handleRootPath); //Associate the handler function to the path + server.begin(); //Start the server +} + +void handle_webserver(){ + server.handleClient(); //Handling of incoming requests +} + + +String Header = "Lichtwecker

Licht Wecker

"; +String Footer = "



Hardware: " + Hardware + ", Software:"+ Software +"
"; + +void handleRootPath() { //Handler for the rooth path + handleArgs(); +} + +//############################################################ +//WebPage Args +void handleArgs(){ + for (int i = 0; i < server.args(); i++) { + //write_log(server.argName(i) +" : " +server.arg(i)); + if(server.argName(i) == "ntp"){ + if(server.arg(i) == "true"){ + if (ntp_update != true){ + ntp_update = true; + write_eeprom(); + } + } + else if (server.arg(i) == "false"){ + if (ntp_update != false){ + ntp_update = false; + write_eeprom(); + } + } + break; + } + else if(server.argName(i) == "a1"){ + if(server.arg(i) == "true"){ + Clock.turnOnAlarm(1); + } + else if (server.arg(i) == "false"){ + Clock.turnOffAlarm(1); + } + break; + } + else if(server.argName(i) == "a2"){ + if(server.arg(i) == "true"){ + Clock.turnOnAlarm(2); + } + else if (server.arg(i) == "false"){ + Clock.turnOffAlarm(2); + } + break; + } + else if(server.argName(i) == "al1h" && server.argName(i +1) == "al1m"){ + al1h = server.arg(i).toInt(); + al1m = server.arg(i+1).toInt(); + set_alarm1(); + break; + } + else if(server.argName(i) == "al2h" && server.argName(i +1) == "al2m"){ + al2h = server.arg(i).toInt(); + al2m = server.arg(i+1).toInt(); + set_alarm2(); + break; + } + else if(server.argName(i) == "reset" && server.arg(i) == "true"){ + ESP.restart(); + break; + } + } + print_website(); +} + + +void print_website(){ + bool A1 = Clock.checkAlarmEnabled(1); + bool A2 = Clock.checkAlarmEnabled(2); + String Alarm1 = "Alarm 1:
:
Sommerzeit: " + getBoolString(summer) + " Aktiv: " + getBoolString(A1) + "
Aktivieren " + "  Deaktivieren"; + String Alarm2 = "Alarm 2:
:
Sommerzeit: " + getBoolString(summer) + " Aktiv: " + getBoolString(A2) + "
Aktivieren " + "  Deaktivieren"; + String Alarm = "

Alarm

" + Alarm1 + "

" + Alarm2; + String Zeit = "

Zeit

" + String(h) + ":" + String(m) + ":" + String(s) + " - " + String(d) + "." + String(M) + "." + String(y) + " | DST: " + String(summertime_EU(y,M,d,h,1)); + String NTP = "

NTP

" + String("stündliches Zeit Update über Netzwerk: ") + getBoolString(ntp_update) + "
Aktivieren " + "  Deaktivieren"; + String Reboot = "

System:

Neustart"; + String Body = Alarm + Zeit + NTP + Reboot; + server.send(200, "text/html", Header + Body + Footer); +} + + +//Helpers +//#################################################################################### +String getBoolString(bool value){ + if(value) + { + return "Ja"; + } + return "Nein"; +} + + +void write_log(String text){ + Serial.println(text); + logfile = logfile + String(text) + "\r\n"; + if (logfile.length() > 140000) { + logfile = logfile.substring((logfile.length()-100000)); + } +} +