diff --git a/platformio.ini b/platformio.ini index 8e0db93..1e7108c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -21,4 +21,5 @@ lib_deps = bblanchon/ArduinoJson@^6.19.4 olikraus/U8g2@^2.34.4 tzapu/WiFiManager@^0.16.0 + paulstoffregen/Time@^1.6.1 monitor_speed = 115200 diff --git a/src/display.cpp b/src/display.cpp index 84061f4..bd9f9e9 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -42,6 +42,8 @@ char* title_grid; bool pv_charging = false; bool show_temp_outside; +int time_hour; +int time_minute; float temperature_outside; char* screenbuffer; @@ -54,6 +56,11 @@ void display_temp_outside(float mqtt_temp_outside) { temperature_outside = mqtt_temp_outside; } +void display_time(int hour, int minute) { + time_hour = hour; + time_minute = minute; +} + void display_begin() { display.begin(); } @@ -107,11 +114,20 @@ void display_header(char* TEXT) { display.setFont(u8g2_font_6x10_tr); display.drawStr(2,7,TEXT); display.drawLine(0, 8, 128, 8); - display.drawLine(94, 0, 94, 8); - display.drawLine(62, 0, 62, 8); + display.drawLine(93, 0, 93, 8); + display.setCursor(97,7); + if (time_hour < 10) { + display.print("0"); + } + display.print(time_hour); display.print(":"); + if (time_minute < 10) { + display.print("0"); + } + display.print(time_minute); if (show_temp_outside) { - display.setCursor(70,7); display.print(temperature_outside,1); display.print("C"); + display.drawLine(58, 0, 58, 8); + display.setCursor(67,7); display.print(temperature_outside,1); display.print("C"); } } diff --git a/src/display.h b/src/display.h index 41b01a0..4b15e6a 100644 --- a/src/display.h +++ b/src/display.h @@ -24,6 +24,7 @@ */ void display_setup(bool set_show_temp_outside,char lang[2]); void display_temp_outside(float temperature_outside); +void display_time(int hour, int minute); void display_begin(); void display_init(char* VERSION); void display_logo(); diff --git a/src/main.cpp b/src/main.cpp index 4570e7c..9e50d00 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -42,13 +42,16 @@ #include #include #include +#include "time.h" //Program parts #include #include #include -char VERSION[6] = "v0.7b"; +char VERSION[6] = "v0.8c"; +#define TimeZone "CET-1CEST,M3.5.0,M10.5.0/3" +#define TimeServ "pool.ntp.org" //Defaults char mqtt_server[15] = ""; @@ -96,6 +99,11 @@ void saveConfigCallback () { WiFiClient espClient; PubSubClient client(espClient); +//Time library setup +time_t now; +tm tm; + + //Globals long lastMsg = 0; char msg[50]; @@ -447,6 +455,17 @@ void setup() { //end save } + //NTP setup + #ifdef ESP32 + configTime(0, 0, TimeServ); + setenv("TZ", TimeZone, 1); + tzset(); + #endif + #ifdef ESP8266 + configTime(TimeZone, TimeServ); + #endif + + delay(1000); //for screen display //Generate mqtt topics from id and address @@ -523,6 +542,8 @@ void loop() { { if(millis() - lastScreenChangeTime >= DISPLAY_SCREEN_INTERVAL) { + time(&now); localtime_r(&now, &tm); //Get local time + display_time(tm.tm_hour, tm.tm_min); display_screen++; lastScreenChangeTime += DISPLAY_SCREEN_INTERVAL; if (display_screen == display_last_screen + 1)