Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45c40e002c | ||
|
|
caa6f3a833 | ||
|
|
a3959376e3 | ||
|
|
05cdb44ab5 | ||
|
|
60755333bf | ||
|
|
f5eaa4cc26 | ||
|
|
2d4a10990a | ||
|
|
1ecddd2789 |
@@ -1,9 +1,9 @@
|
|||||||
void run_alarm(long currentMillis){
|
void run_alarm(long currentMillis){
|
||||||
if (test_alarm())
|
if (test_alarm())
|
||||||
{
|
{
|
||||||
Serial.println("Start Alarm");
|
write_log("Start Alarm");
|
||||||
start_wake_light(currentMillis);
|
start_wake_light(currentMillis);
|
||||||
setAlarmTimer(15);
|
setAlarmTimer(wakeup_time + 5);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if (run_wake_up(currentMillis)){
|
if (run_wake_up(currentMillis)){
|
||||||
@@ -12,7 +12,7 @@ void run_alarm(long currentMillis){
|
|||||||
}
|
}
|
||||||
//Test if Summer->Winter time change (this should also change the Alarm times!)
|
//Test if Summer->Winter time change (this should also change the Alarm times!)
|
||||||
bool dst = summertime_EU(y,M,d,h,1);
|
bool dst = summertime_EU(y,M,d,h,1);
|
||||||
//Serial.println(String(dst) + ":" + String(summer));
|
//write_log(String(dst) + ":" + String(summer));
|
||||||
if (dst != summer)
|
if (dst != summer)
|
||||||
{
|
{
|
||||||
summer = dst;
|
summer = dst;
|
||||||
@@ -23,7 +23,7 @@ void run_alarm(long currentMillis){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void stop_alarm(){
|
void stop_alarm(){
|
||||||
Serial.println("Stop Alarm");
|
write_log("Stop Alarm");
|
||||||
stop_wake_light();
|
stop_wake_light();
|
||||||
stop_alarm_beep();
|
stop_alarm_beep();
|
||||||
setAlarmTimer(0);
|
setAlarmTimer(0);
|
||||||
@@ -188,7 +188,7 @@ void set_alarm1(){
|
|||||||
byte A1Day, A1Hour, A1Minute, A1Second, AlarmBits;
|
byte A1Day, A1Hour, A1Minute, A1Second, AlarmBits;
|
||||||
bool A1Dy, A1h12, A1PM;
|
bool A1Dy, A1h12, A1PM;
|
||||||
Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, AlarmBits, 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));
|
//display_text("Alarm 1", String(A1Hour) + ":" +String(A1Minute));
|
||||||
//delay_gui(1000);
|
//delay_gui(1000);
|
||||||
}
|
}
|
||||||
@@ -208,7 +208,7 @@ void set_alarm2(){
|
|||||||
byte A1Day, A1Hour, A1Minute, AlarmBits;
|
byte A1Day, A1Hour, A1Minute, AlarmBits;
|
||||||
bool A1Dy, A1h12, A1PM;
|
bool A1Dy, A1h12, A1PM;
|
||||||
Clock.getA2Time(A1Day, A1Hour, A1Minute, AlarmBits, 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));
|
//display_text("Alarm 2", String(A1Hour) + ":" +String(A1Minute));
|
||||||
//delay_gui(1000);
|
//delay_gui(1000);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,12 +9,20 @@
|
|||||||
#include <SPI.h>
|
#include <SPI.h>
|
||||||
#include <DS3231.h>
|
#include <DS3231.h>
|
||||||
#include <WiFiUdp.h>
|
#include <WiFiUdp.h>
|
||||||
#include <ArduinoOTA.h>
|
#include <ESP8266HTTPUpdateServer.h>;
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include <LiquidCrystal_I2C.h> //https://github.com/agnunez/ESP8266-I2C-LCD1602
|
#include <LiquidCrystal_I2C.h> //https://github.com/agnunez/ESP8266-I2C-LCD1602
|
||||||
#include <NTPtimeESP.h> //https://github.com/SensorsIot/NTPtimeESP
|
#include <NTPtimeESP.h> //https://github.com/SensorsIot/NTPtimeESP
|
||||||
#include <EEPROM.h>
|
#include <EEPROM.h>
|
||||||
|
|
||||||
|
String Hardware = "0.11";
|
||||||
|
String Software = "0.09";
|
||||||
|
String ntp_server = "ntp2.uni-augsburg.de";
|
||||||
|
|
||||||
|
// Set web server port number to 80
|
||||||
|
ESP8266WebServer server(80);
|
||||||
|
ESP8266HTTPUpdateServer httpUpdater;
|
||||||
|
|
||||||
//LED Band Setup
|
//LED Band Setup
|
||||||
#define FASTLED_ESP8266_RAW_PIN_ORDER
|
#define FASTLED_ESP8266_RAW_PIN_ORDER
|
||||||
#include "FastLED.h"
|
#include "FastLED.h"
|
||||||
@@ -30,7 +38,7 @@ CRGB leds[NUM_LEDS];
|
|||||||
RTClib RTC;
|
RTClib RTC;
|
||||||
DS3231 Clock;
|
DS3231 Clock;
|
||||||
//NTP Setup
|
//NTP Setup
|
||||||
NTPtime NTPch("ch.pool.ntp.org"); // Choose server pool as required
|
NTPtime NTPch(ntp_server); // Choose server pool as required
|
||||||
|
|
||||||
//Display
|
//Display
|
||||||
LiquidCrystal_I2C lcd(0x3f, 16, 2);
|
LiquidCrystal_I2C lcd(0x3f, 16, 2);
|
||||||
@@ -48,6 +56,9 @@ const int outBeep = 9;
|
|||||||
//To know if connected to wifi or not:
|
//To know if connected to wifi or not:
|
||||||
bool wifi_connected = false;
|
bool wifi_connected = false;
|
||||||
|
|
||||||
|
bool ntp_update = true;
|
||||||
|
int wakeup_time = 10;
|
||||||
|
|
||||||
//For Summertime change notification (change alarmtime) this should be saved in the EEPROM!
|
//For Summertime change notification (change alarmtime) this should be saved in the EEPROM!
|
||||||
bool summer = false;
|
bool summer = false;
|
||||||
|
|
||||||
@@ -84,13 +95,11 @@ long previousMillis = 0;
|
|||||||
|
|
||||||
void configModeCallback (WiFiManager *myWiFiManager) {
|
void configModeCallback (WiFiManager *myWiFiManager) {
|
||||||
//if you used auto generated SSID, print it
|
//if you used auto generated SSID, print it
|
||||||
//Serial.println(myWiFiManager->getConfigPortalSSID());
|
//write_log(myWiFiManager->getConfigPortalSSID());
|
||||||
display_text("Wifi: Licht","PW: Wecker");
|
display_text("Wifi: Licht","PW: Wecker");
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
// put your setup code here, to run once:
|
|
||||||
// Initializing serial port for debugging purposes
|
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
delay(10);
|
delay(10);
|
||||||
|
|
||||||
@@ -161,19 +170,19 @@ void setup() {
|
|||||||
delay(5000);
|
delay(5000);
|
||||||
}
|
}
|
||||||
if (wifiManager.autoConnect("Licht", "Wecker")){
|
if (wifiManager.autoConnect("Licht", "Wecker")){
|
||||||
Serial.println("WiFi connected");
|
write_log("WiFi connected");
|
||||||
Serial.print("IP address: ");
|
write_log("IP address: ");
|
||||||
Serial.println(WiFi.localIP());
|
write_log(WiFi.localIP().toString());
|
||||||
wifi_connected = true;
|
wifi_connected = true;
|
||||||
display_text("IP address",String(WiFi.localIP()));
|
display_text("IP address",WiFi.localIP().toString());
|
||||||
delay(5000);
|
delay(5000);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
WiFi.mode(WIFI_OFF);
|
WiFi.mode(WIFI_OFF);
|
||||||
}
|
}
|
||||||
display_text("Licht Wecker","SW: 0.03");
|
display_text("Licht Wecker","SW: " + Software);
|
||||||
delay(1000);
|
delay(1000);
|
||||||
display_text("Licht Wecker","HW: 0.02");
|
display_text("Licht Wecker","HW: " + Hardware);
|
||||||
delay(1000);
|
delay(1000);
|
||||||
display_text("Licht Wecker","");
|
display_text("Licht Wecker","");
|
||||||
|
|
||||||
@@ -195,7 +204,7 @@ void setup() {
|
|||||||
al1h = A1Hour;
|
al1h = A1Hour;
|
||||||
}
|
}
|
||||||
al1m = A1Minute;
|
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);
|
Clock.getA2Time(A1Day, A1Hour, A1Minute, AlarmBits, A1Dy, A1h12, A1PM);
|
||||||
if (summer)
|
if (summer)
|
||||||
@@ -206,53 +215,25 @@ void setup() {
|
|||||||
al2h = A1Hour;
|
al2h = A1Hour;
|
||||||
}
|
}
|
||||||
al2m = A1Minute;
|
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();
|
show_green();
|
||||||
|
update_time_from_web();
|
||||||
delay(1000);
|
delay(1000);
|
||||||
show_black();
|
show_black();
|
||||||
|
|
||||||
previousMillis = millis();
|
previousMillis = millis();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
//OTA
|
|
||||||
// No authentication by default
|
|
||||||
|
|
||||||
ArduinoOTA.setPassword(NodeName.c_str());
|
|
||||||
ArduinoOTA.setHostname(NodeName.c_str());
|
|
||||||
|
|
||||||
ArduinoOTA.onStart([]() {
|
|
||||||
Serial.println("Start");
|
|
||||||
});
|
|
||||||
ArduinoOTA.onEnd([]() {
|
|
||||||
Serial.println("\nEnd");
|
|
||||||
});
|
|
||||||
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
|
|
||||||
Serial.printf("Progress: %u%%\r", (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");
|
|
||||||
});
|
|
||||||
ArduinoOTA.begin();
|
|
||||||
//-------------------------------------------------
|
|
||||||
update_time_from_web();
|
update_time_from_web();
|
||||||
|
|
||||||
|
setup_webserver();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
//OTA
|
handle_webserver();
|
||||||
ArduinoOTA.handle();
|
|
||||||
//OTA
|
|
||||||
|
|
||||||
unsigned long currentMillis = millis();
|
unsigned long currentMillis = millis();
|
||||||
long intervall = currentMillis - previousMillis;
|
unsigned long intervall = currentMillis - previousMillis;
|
||||||
|
|
||||||
release_gui(currentMillis);
|
release_gui(currentMillis);
|
||||||
|
|
||||||
@@ -269,7 +250,7 @@ void loop() {
|
|||||||
}
|
}
|
||||||
test_pin();
|
test_pin();
|
||||||
handleSleep(intervall, currentMillis);
|
handleSleep(intervall, currentMillis);
|
||||||
if(m == 1)
|
if(m == 1 && s == 30)
|
||||||
{
|
{
|
||||||
update_time_from_web();
|
update_time_from_web();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ void update_Time(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
dow = daysOfTheWeek[Clock.getDoW()];
|
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)));
|
||||||
}
|
}
|
||||||
|
|
||||||
//###################################################################################################################################
|
//###################################################################################################################################
|
||||||
@@ -123,10 +123,15 @@ void display_year(int Day, int Month, int Year){
|
|||||||
void display_time(int Stunde, int Minute, int Sekunde){
|
void display_time(int Stunde, int Minute, int Sekunde){
|
||||||
String Min = String(Minute);
|
String Min = String(Minute);
|
||||||
String Stu = String(Stunde);
|
String Stu = String(Stunde);
|
||||||
|
String Sek = String(Sekunde);
|
||||||
if (Minute < 10)
|
if (Minute < 10)
|
||||||
{
|
{
|
||||||
Min = "0" + Min;
|
Min = "0" + Min;
|
||||||
}
|
}
|
||||||
|
if (Sekunde < 10)
|
||||||
|
{
|
||||||
|
Sek = "0" + Sek;
|
||||||
|
}
|
||||||
if (Stunde < 10)
|
if (Stunde < 10)
|
||||||
{
|
{
|
||||||
Stu = "0" + Stu;
|
Stu = "0" + Stu;
|
||||||
@@ -159,11 +164,11 @@ void display_time(int Stunde, int Minute, int Sekunde){
|
|||||||
{
|
{
|
||||||
display_text("Alarm 2", "Minute: " + Min);
|
display_text("Alarm 2", "Minute: " + Min);
|
||||||
}
|
}
|
||||||
else if (Sekunde % 2 == 0){
|
/*else if (Sekunde % 2 == 0){
|
||||||
display_text(Stu + ":" + Min, get_alarm_string());
|
display_text(Stu + ":" + Min, get_alarm_string());
|
||||||
}
|
}*/
|
||||||
else{
|
else{
|
||||||
display_text(Stu + "." + Min, get_alarm_string());
|
display_text(Stu + ":" + Min + ":" + Sek, get_alarm_string());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,7 +252,7 @@ void set_clock(){
|
|||||||
//Clock.setDoW(DoW);
|
//Clock.setDoW(DoW);
|
||||||
if (summertime_EU(y,M,d,h,1))
|
if (summertime_EU(y,M,d,h,1))
|
||||||
{
|
{
|
||||||
Clock.setHour(h-1);
|
Clock.setHour(h-1);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
Clock.setHour(h);
|
Clock.setHour(h);
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ void toggle_alarm_beep(){
|
|||||||
void beepOff(){
|
void beepOff(){
|
||||||
int currentState = digitalRead(outBeep);
|
int currentState = digitalRead(outBeep);
|
||||||
if (currentState != LOW){
|
if (currentState != LOW){
|
||||||
Serial.println("ALARM");
|
//write_log("ALARM");
|
||||||
digitalWrite(outBeep, LOW);
|
digitalWrite(outBeep, LOW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -36,7 +36,7 @@ void beepOff(){
|
|||||||
void beepOn(){
|
void beepOn(){
|
||||||
int currentState = digitalRead(outBeep);
|
int currentState = digitalRead(outBeep);
|
||||||
if (currentState != HIGH){
|
if (currentState != HIGH){
|
||||||
Serial.println("ALARM");
|
//write_log("ALARM");
|
||||||
digitalWrite(outBeep, HIGH);
|
digitalWrite(outBeep, HIGH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ String current_string = "";
|
|||||||
|
|
||||||
void display_text(String text1, String text2){
|
void display_text(String text1, String text2){
|
||||||
if (current_string != text1 + text2){
|
if (current_string != text1 + text2){
|
||||||
//Serial.println("Display:");
|
//write_log("Display:");
|
||||||
lcd.clear();
|
lcd.clear();
|
||||||
lcd.setCursor(freespace(text1), 0);
|
lcd.setCursor(freespace(text1), 0);
|
||||||
lcd.print(text1);
|
lcd.print(text1);
|
||||||
//Serial.println(text1);
|
//write_log(text1);
|
||||||
lcd.setCursor(freespace(text2), 1);
|
lcd.setCursor(freespace(text2), 1);
|
||||||
lcd.print(text2);
|
lcd.print(text2);
|
||||||
//Serial.println(text2);
|
//write_log(text2);
|
||||||
//ledMatrix.clear();
|
//ledMatrix.clear();
|
||||||
//ledMatrix.setText(text);
|
//ledMatrix.setText(text);
|
||||||
//ledMatrix.drawText();
|
//ledMatrix.drawText();
|
||||||
|
|||||||
@@ -4,13 +4,22 @@ uint addr = 0;
|
|||||||
|
|
||||||
struct {
|
struct {
|
||||||
bool summertime = false;
|
bool summertime = false;
|
||||||
|
bool ntp_update = true;
|
||||||
|
int wakeup_time = 10;
|
||||||
|
char ntp_server[22] = "ntp2.uni-augsburg.de";
|
||||||
} data;
|
} data;
|
||||||
|
|
||||||
void write_eeprom(){
|
void write_eeprom(){
|
||||||
EEPROM.begin(512);
|
EEPROM.begin(1024);
|
||||||
// load EEPROM data into RAM, see it
|
// load EEPROM data into RAM, see it
|
||||||
data.summertime = summer;
|
data.summertime = summer;
|
||||||
Serial.println("Writing to EEPROM: "+String(data.summertime));
|
data.ntp_update = ntp_update;
|
||||||
|
data.wakeup_time = wakeup_time;
|
||||||
|
ntp_server.toCharArray(data.ntp_server,22);
|
||||||
|
write_log("Writing to EEPROM: "+String(data.summertime));
|
||||||
|
write_log("Writing to EEPROM: "+String(data.ntp_update));
|
||||||
|
write_log("Writing to EEPROM: "+String(data.wakeup_time));
|
||||||
|
write_log("Writing to EEPROM: "+String(data.ntp_server));
|
||||||
// replace values in EEPROM
|
// replace values in EEPROM
|
||||||
EEPROM.put(addr,data);
|
EEPROM.put(addr,data);
|
||||||
EEPROM.commit();
|
EEPROM.commit();
|
||||||
@@ -18,10 +27,25 @@ void write_eeprom(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool get_eeprom(){
|
bool get_eeprom(){
|
||||||
EEPROM.begin(512);
|
EEPROM.begin(1024);
|
||||||
EEPROM.get(addr,data);
|
EEPROM.get(addr,data);
|
||||||
Serial.println("Found: "+String(data.summertime));
|
write_log("Read: "+String(data.summertime));
|
||||||
|
write_log("Read: "+String(data.ntp_update));
|
||||||
|
write_log("Read: "+String(data.wakeup_time));
|
||||||
|
write_log("Read: "+String(data.ntp_update));
|
||||||
EEPROM.end();
|
EEPROM.end();
|
||||||
summer = data.summertime;
|
summer = data.summertime;
|
||||||
|
ntp_update = data.ntp_update;
|
||||||
|
wakeup_time = data.wakeup_time;
|
||||||
|
ntp_server = data.ntp_server;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void reset_eeprom(){
|
||||||
|
summer = false;
|
||||||
|
ntp_update = true;
|
||||||
|
wakeup_time = 10;
|
||||||
|
ntp_server = "ntp2.uni-augsburg.de";
|
||||||
|
write_eeprom();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ void show_white(){
|
|||||||
leds[i] = CRGB::White;
|
leds[i] = CRGB::White;
|
||||||
}
|
}
|
||||||
FastLED.show();
|
FastLED.show();
|
||||||
Serial.println("Light: WHITE");
|
//write_log("Light: WHITE");
|
||||||
}
|
}
|
||||||
|
|
||||||
//Show LED Colors
|
//Show LED Colors
|
||||||
@@ -19,7 +19,7 @@ void show_black(){
|
|||||||
leds[i] = CRGB::Black;
|
leds[i] = CRGB::Black;
|
||||||
}
|
}
|
||||||
FastLED.show();
|
FastLED.show();
|
||||||
//Serial.println("Light: BLACK");
|
//write_log("Light: BLACK");
|
||||||
}
|
}
|
||||||
|
|
||||||
//Show LED Colors
|
//Show LED Colors
|
||||||
@@ -31,7 +31,7 @@ void show_green(){
|
|||||||
leds[i] = CRGB::Green;
|
leds[i] = CRGB::Green;
|
||||||
}
|
}
|
||||||
FastLED.show();
|
FastLED.show();
|
||||||
Serial.println("Light: GREEN");
|
write_log("Light: GREEN");
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_color(int r, int g, int b){
|
void set_color(int r, int g, int b){
|
||||||
@@ -41,24 +41,30 @@ void set_color(int r, int g, int b){
|
|||||||
leds[i].setRGB( r, g, b);
|
leds[i].setRGB( r, g, b);
|
||||||
}
|
}
|
||||||
FastLED.show();
|
FastLED.show();
|
||||||
Serial.println("Light: ");
|
//write_log("Light: ");
|
||||||
Serial.println(r);
|
//write_log(String(r));
|
||||||
Serial.println(b);
|
//write_log(String(b));
|
||||||
Serial.println(g);
|
//write_log(String(g));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool run_wake_up(long currentMillis){
|
bool run_wake_up(long currentMillis){
|
||||||
if (alarm_started == true)
|
if (alarm_started == true)
|
||||||
{
|
{
|
||||||
long delta = (currentMillis - startTime)/1000;
|
long delta = (currentMillis - startTime)/1000;
|
||||||
if (delta < 220){
|
long max_wake_time = wakeup_time *60; //Calculate Wakeuptime in Seconds
|
||||||
set_color(30 + int(delta), int(delta)/4, 0);
|
int maxvalue = int(220/(max_wake_time/3));
|
||||||
|
|
||||||
|
if (delta < (max_wake_time/3)){
|
||||||
|
int color_time = delta * maxvalue;
|
||||||
|
set_color(30 + int(color_time), int(color_time)/4, 0);
|
||||||
}
|
}
|
||||||
else if(delta < 405){
|
else if((delta < ((max_wake_time/3)*2))){
|
||||||
set_color(255, int(delta - 220)+55, int((delta - 220)/4));
|
int color_time = (delta - (max_wake_time/3)) * maxvalue;
|
||||||
|
set_color(255, int(color_time)+30, int((color_time)/4));
|
||||||
}
|
}
|
||||||
else if(delta < 605){
|
else if(delta < max_wake_time){
|
||||||
set_color(255, 255, int((delta - 405))+55);
|
int color_time = (delta - ((max_wake_time/3)*2)) * maxvalue;
|
||||||
|
set_color(255, 255, int((color_time))+30);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if (delta % 2 == 0){
|
if (delta % 2 == 0){
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
//Code to update time from the web
|
//Code to update time from the web
|
||||||
void update_time_from_web(){
|
void update_time_from_web(){
|
||||||
//Serial.println(wifi_connected);
|
//write_log(wifi_connected);
|
||||||
if (wifi_connected == true)
|
if (wifi_connected == true && ntp_update == true)
|
||||||
{
|
{
|
||||||
strDateTime dateTime;
|
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)
|
// 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)
|
||||||
@@ -17,7 +17,7 @@ void update_time_from_web(){
|
|||||||
byte actualMonth = dateTime.month;
|
byte actualMonth = dateTime.month;
|
||||||
byte actualday =dateTime.day;
|
byte actualday =dateTime.day;
|
||||||
byte actualdayofWeek = dateTime.dayofWeek;
|
byte actualdayofWeek = dateTime.dayofWeek;
|
||||||
if (actualMinute != m){
|
if (actualMinute != m && actualday != 7 && actualMonth != 2 && actualyear != 2036 && actualHour != 0){
|
||||||
h = actualHour;
|
h = actualHour;
|
||||||
m = actualMinute;
|
m = actualMinute;
|
||||||
s = actualsecond;
|
s = actualsecond;
|
||||||
@@ -25,7 +25,10 @@ void update_time_from_web(){
|
|||||||
M = actualMonth;
|
M = actualMonth;
|
||||||
d = actualday;
|
d = actualday;
|
||||||
set_clock();
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
159
LichtWecker/webserver.ino
Normal file
159
LichtWecker/webserver.ino
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
String logfile = "";
|
||||||
|
//Webserver
|
||||||
|
//###################################################################################
|
||||||
|
|
||||||
|
void setup_webserver(){
|
||||||
|
httpUpdater.setup(&server, "Licht", "Wecker");
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Layout
|
||||||
|
//###################################################################################
|
||||||
|
|
||||||
|
String Meta = "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\"><meta charset=\"UTF-8\">";
|
||||||
|
String CSS = "<style>.card {box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);background-color: white;transition: 0.3s;margin: 0.2rem;padding: 0.4rem;padding-top: 0.5rem;display: inline-block;display: -webkit-inline-block;text-align:center;flex: 1;-webkit-flex: 1 1 250px;}.cardcontainer {box-sizing: border-box;display:flex;flex-wrap: wrap;display: -webkit-flex;-webkit-flex-wrap: wrap;overflow:auto;}#footer {border-top: 3px solid darkblue;-webkit-justify-content: space-around;display: absolute;justify-content: space-around;}</style>";
|
||||||
|
String Header = "<!DOCTYPE html><html><head>" + Meta + CSS + "<title>Lichtwecker</title></head><body style=\"text-align:left;margin: 0px;padding: 0px;\"><div id=\"header\" style=\"background-color: blue;margin: 0px;padding: 0px;color: white;border: 0.2em solid blue;text-align: center;\"><h1 style=\"margin:0px;padding:0px\">Licht Wecker</h1></div><div id=\"content\" style=\"font-size:1.2em;margin:0.5em;\" class=\"cardcontainer\">";
|
||||||
|
String Footer = "</div><br><br><div id=\"footer\">Not for Sale, Prototyp by <a href=\"http://christian.mittring-mering.de/\">CHM</a>, Hardware: " + Hardware + ", Software: "+ Software +"</div></body></html> ";
|
||||||
|
String card_start = "<div class=\"card\">";
|
||||||
|
String card_end = "</div>";
|
||||||
|
|
||||||
|
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) == "ntp_server"){
|
||||||
|
if (server.arg(i) != ""){
|
||||||
|
ntp_server = server.arg(i);
|
||||||
|
write_eeprom();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if(server.argName(i) == "wakeup_time"){
|
||||||
|
if (server.arg(i) != ""){
|
||||||
|
wakeup_time = server.arg(i).toInt();
|
||||||
|
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"){
|
||||||
|
print_reset();
|
||||||
|
ESP.restart();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if(server.argName(i) == "factory_reset" && server.arg(i) == "true"){
|
||||||
|
reset_eeprom();
|
||||||
|
print_reset();
|
||||||
|
delay(1000);
|
||||||
|
ESP.restart();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print_website();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Webpage
|
||||||
|
//###################################################################################
|
||||||
|
|
||||||
|
void print_website(){
|
||||||
|
bool A1 = Clock.checkAlarmEnabled(1);
|
||||||
|
bool A2 = Clock.checkAlarmEnabled(2);
|
||||||
|
String Alarm1 = "<b>Alarm 1:</b> <form action=\"/\" methode=\"get\"><input type=\"number\" name=\"al1h\" value=\"" + String(al1h) + "\">:<input type=\"number\" name=\"al1m\" value=\"" + String(al1m) + "\"><input type=\"submit\" value=\"Speichern\"></form> Sommerzeit: " + getBoolString(summer) + "<br>Aktiv: " + getBoolString(A1) + "<br><a href=\"?a1=true\">Aktivieren</a> " + " <a href=\"?a1=false\">Deaktivieren</a>";
|
||||||
|
String Alarm2 = "<b>Alarm 2:</b> <form action=\"/\" methode=\"get\"><input type=\"number\" name=\"al2h\" value=\"" + String(al2h) + "\">:<input type=\"number\" name=\"al2m\" value=\"" + String(al2m) + "\"><input type=\"submit\" value=\"Speichern\"></form> Sommerzeit: " + getBoolString(summer) + "<br>Aktiv: " + getBoolString(A2) + "<br><a href=\"?a2=true\">Aktivieren</a> " + " <a href=\"?a2=false\">Deaktivieren</a>";
|
||||||
|
String Weckzeit = "<b>Weckdauer (Minuten):</b> <form action=\"/\" methode=\"get\"><input type=\"number\" name=\"wakeup_time\" value=\"" + String(wakeup_time) + "\"><input type=\"submit\" value=\"Speichern\"></form>";
|
||||||
|
String Alarm = "<h3>Alarm</h3>" + Alarm1 + "<br><br>" + Alarm2 + "<br><br>" + Weckzeit;
|
||||||
|
String Zeit = "<br><h3>Zeit</h3>" + String(h) + ":" + String(m) + ":" + String(s) + " - " + String(d) + "." + String(M) + "." + String(y) + " | DST: " + String(summertime_EU(y,M,d,h,1));
|
||||||
|
String NTP = "<br><h3>NTP</h3><b>Server:</b> <form action=\"/\" methode=\"get\"><input type=\"text\" name=\"ntp_server\" value=\"" + String(ntp_server) + "\"><input type=\"submit\" value=\"Speichern\"></form><br>stündliches Zeit Update: " + getBoolString(ntp_update) + "<br><a href=\"?ntp=true\">Aktivieren</a> " + " <a href=\"?ntp=false\">Deaktivieren</a>";
|
||||||
|
String Reboot = "<br><h3>System:</h3><a href=\"?reset=true\">Neustart</a><br><br><a href=\"update\">Software Update Modus</a><br><br><a href=\"?factory_reset=true\">Werkseinstellungen</a><br><br><a href=\"log\">Log</a>";
|
||||||
|
String Body = card_start + Alarm + card_end + card_start + Zeit + card_end + card_start + NTP + card_end + card_start + Reboot + card_end;
|
||||||
|
server.send(200, "text/html", Header + Body + Footer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_reset(){
|
||||||
|
String Body = "<div class=\"card\">Neustart... <a href=\"/\">Neu laden</a></div>";
|
||||||
|
server.send(200, "text/html", Header + Body + Footer);
|
||||||
|
delay(500);
|
||||||
|
}
|
||||||
|
|
||||||
|
//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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user