Skip to content

Commit

Permalink
esp8266 support
Browse files Browse the repository at this point in the history
  • Loading branch information
tobozo committed Dec 31, 2023
1 parent 07c0e96 commit 6c23539
Show file tree
Hide file tree
Showing 8 changed files with 233 additions and 176 deletions.
28 changes: 16 additions & 12 deletions examples/tzupdate/tzupdate.ino
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,18 @@ WiFiManager wifiManager;
bool configSaved = false;


// Optional callback function, fired when NTP gets updated.
// Used to print the updated time or adjust an external RTC module.
void on_time_available(struct timeval *t)
{
Serial.println("Received time adjustment from NTP");
struct tm timeInfo;
getLocalTime(&timeInfo, 1000);
Serial.println(&timeInfo, "%A, %B %d %Y %H:%M:%S zone %Z %z ");
// RTC.adjust( &timeInfo );
}
#if defined ESP32
// Optional callback function, fired when NTP gets updated.
// Used to print the updated time or adjust an external RTC module.
void on_time_available(struct timeval *t)
{
Serial.println("Received time adjustment from NTP");
struct tm timeInfo;
getLocalTime(&timeInfo, 1000);
Serial.println(&timeInfo, "%A, %B %d %Y %H:%M:%S zone %Z %z ");
// RTC.adjust( &timeInfo );
}
#endif



Expand All @@ -57,8 +59,10 @@ void setup()

// wifiManager.resetSettings();

// optionally attach external RTC update callback
WiFiManagerNS::NTP::onTimeAvailable( &on_time_available );
#if defined ESP32
// optionally attach external RTC update callback
WiFiManagerNS::NTP::onTimeAvailable( &on_time_available );
#endif

// attach NTP/TZ/Clock-setup page to the WiFi Manager
WiFiManagerNS::init( &wifiManager, nullptr );
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ sentence=A NTP/Timezone extension to @tzapu's WiFiManager
paragraph=WiFiManagerTz is a plugin for @tzapu's WiFiManager, adds timezone update/preselection, DST, NTP sync and settings persistence
category=Communication
url=https://github.com/tobozo/WiFiManagerTz
architectures=esp32
architectures=esp32,esp8266
includes=WiFiManagerTz.h
depends=WiFiManager,Time
license=MIT
Expand Down
79 changes: 46 additions & 33 deletions src/NTP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,41 +45,44 @@ namespace WiFiManagerNS

const char* defaultServer = "pool.ntp.org";
uint8_t currentServer = 0;
unsigned int sync_delay = 60; // minutes

unsigned int getSyncDelay()
{
return sync_delay;
}
#if defined ESP32

void setSyncDelay( unsigned int minutes )
{
if( sync_delay != minutes ) {
log_d("Setting NTP sync delay to #%d minutes", minutes );
prefs::setUInt( NVS_NTP_DELAYMIN, minutes );
unsigned int sync_delay = 60; // minutes

unsigned int getSyncDelay()
{
return sync_delay;
}
sync_delay = minutes;
sntp_set_sync_interval(sync_delay*60*1000);
}

// Callback function (get's called when time adjusts via NTP)
void timeavailable_default(struct timeval *t)
{
Serial.println("Got time adjustment from NTP!");
struct tm timeInfo;
getLocalTime(&timeInfo, 1000);
Serial.println(&timeInfo, "%A, %B %d %Y %H:%M:%S zone %Z %z ");
}
void setSyncDelay( unsigned int minutes )
{
if( sync_delay != minutes ) {
sync_delay = minutes;
log_d("Setting NTP sync delay to #%d minutes", minutes );
prefs::setUInt( NVS_NTP_DELAYMIN, minutes );
}
sntp_set_sync_interval(sync_delay*60*1000);
}

// Callback function (get's called when time adjusts via NTP)
void timeavailable_default(struct timeval *t)
{
Serial.println("Got time adjustment from NTP!");
struct tm timeInfo;
getLocalTime(&timeInfo, 1000);
Serial.println(&timeInfo, "%A, %B %d %Y %H:%M:%S zone %Z %z ");
}

static onTimeAvailable_fn timeavailable = &timeavailable_default;

void onTimeAvailable( onTimeAvailable_fn fn )
{
log_d("Settting custom time notifier");
timeavailable = fn;
}
static onTimeAvailable_fn timeavailable = &timeavailable_default;

void onTimeAvailable( onTimeAvailable_fn fn )
{
log_d("Settting custom time notifier");
timeavailable = fn;
}
#endif

bool setServer( uint8_t id )
{
Expand All @@ -89,7 +92,12 @@ namespace WiFiManagerNS
if( id != currentServer ) {
currentServer = id;
log_d("Setting NTP server to #%d ( %s / %s )", currentServer, Servers[currentServer].name, Servers[currentServer].addr );
prefs::setUChar( NVS_NTPZONE_KEY, currentServer );
#if defined ESP32
prefs::setUChar( NVS_NTPZONE_KEY, currentServer );
#else
prefs::setPref( NTP_ZONE_KEY, currentServer );
#endif

}
return true;
}
Expand Down Expand Up @@ -118,11 +126,16 @@ namespace WiFiManagerNS

void loadPrefs()
{
prefs::getUChar( NVS_NTPZONE_KEY, &currentServer, currentServer );
prefs::getUInt( NVS_NTP_DELAYMIN, &sync_delay, sync_delay );
if( timeavailable )
sntp_set_time_sync_notification_cb( timeavailable );
sntp_set_sync_interval(sync_delay*60*1000);
#if defined ESP32
prefs::getUChar( NVS_NTPZONE_KEY, &currentServer, currentServer );
prefs::getUInt( NVS_NTP_DELAYMIN, &sync_delay, sync_delay );
if( timeavailable )
sntp_set_time_sync_notification_cb( timeavailable );
sntp_set_sync_interval(sync_delay*60*1000);
#else
currentServer = prefs::getPref( NTP_ZONE_KEY );
//sync_delay = (unsigned int)prefs::getPref( NTP_DELAYMIN );
#endif
}

};
Expand Down
11 changes: 7 additions & 4 deletions src/NTP.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ namespace WiFiManagerNS
};


void setSyncDelay( unsigned int minutes );
unsigned int getSyncDelay(); // minutes


void loadPrefServer();
void loadPrefs();
Expand All @@ -52,10 +51,14 @@ namespace WiFiManagerNS
uint8_t getServerId();
const char* server();

#if defined ESP32
void setSyncDelay( unsigned int minutes );
unsigned int getSyncDelay(); // minutes

typedef void(*onTimeAvailable_fn)(struct timeval *t);
typedef void(*onTimeAvailable_fn)(struct timeval *t);

void onTimeAvailable( onTimeAvailable_fn fn );
void onTimeAvailable( onTimeAvailable_fn fn );
#endif



Expand Down
17 changes: 16 additions & 1 deletion src/TZ.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,29 @@ namespace WiFiManagerNS

void loadPrefs()
{
prefs::get( prefName, tzName, 255, defaultTzName );
#if defined ESP32
prefs::get( prefName, tzName, 255, defaultTzName );
#else
tzId = prefs::getPref(TIMEZONE_ID);
sprintf(tzName, "%s", timezones[tzId] );
#endif
}


void setTzName( const char* name )
{
if( strcmp( tzName, name ) != 0 ) {
#if defined ESP32
prefs::set( prefName, name, strlen(name) );
#else
for(size_t i=0;i<count;i++) {
if( strcmp(name, timezones[0])==0 ) {
tzId = i;
prefs::setPref(TIMEZONE_ID, tzId );
}
}
#endif

}
snprintf( tzName, 254, "%s", name );
}
Expand Down
36 changes: 23 additions & 13 deletions src/WiFiManagerTz.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
#include "NTP.hpp"
#include "TZ.hpp"



namespace WiFiManagerNS
{

Expand Down Expand Up @@ -135,7 +133,11 @@ namespace WiFiManagerNS
_wifiManager->setClass("invert");
// _wifiManager->wm.setDarkMode(true);
TZ::loadPrefs();
prefs::getBool("NTPEnabled", &NTPEnabled, false );
#if defined ESP32
prefs::getBool("NTPEnabled", &NTPEnabled, false );
#else
NTPEnabled = prefs::getPref(prefs::NTP_ENABLED);
#endif
if( NTPEnabled ) {
NTP::loadPrefs();
}
Expand Down Expand Up @@ -181,7 +183,7 @@ namespace WiFiManagerNS
//const char *currentTimeZone = "Europe/Paris";
TimeConfHTML += "<label for='timezone'>Time Zone</label>";
TimeConfHTML += "<select id='timezone' name='timezone'>";
for(int i = 0; i < TZ::zones(); i += 2) {
for(size_t i = 0; i < TZ::zones(); i += 2) {
bool selected = (strcmp(TZ::tzName, TZ::timezones[i]) == 0);
TimeConfHTML += "<option value='"+ String(i) +"'" + String(selected ? "selected":"") + ">"+ String( TZ::timezones[i]) +"</option>";
}
Expand Down Expand Up @@ -212,17 +214,19 @@ namespace WiFiManagerNS
TimeConfHTML += "<select id='ntp-server-list' name='ntp-server'>";
size_t servers_count = sizeof( NTP::Servers ) / sizeof( NTP::Server );
uint8_t server_id = NTP::getServerId();
for( int i=0; i<servers_count; i++ ) {
for( size_t i=0; i<servers_count; i++ ) {
TimeConfHTML += "<option value='"+ String(i) +"'" + String(i==server_id ? "selected":"") + ">"+ String(NTP::Servers[i].name) +"("+ String(NTP::Servers[i].addr) +")</option>";
}
TimeConfHTML += "</select><br>";

TimeConfHTML += "<label for='ntp-server-interval'>Sync interval:</label>";
TimeConfHTML += "<select id='ntp-server-interval' name='ntp-server-interval'>";
TimeConfHTML += "<option value=60>Hourly</option>";
TimeConfHTML += "<option value=14400>Daily</option>";
TimeConfHTML += "<option value=10080>Weekly</option>";
TimeConfHTML += "</select><br>";
#if defined ESP32
TimeConfHTML += "<label for='ntp-server-interval'>Sync interval:</label>";
TimeConfHTML += "<select id='ntp-server-interval' name='ntp-server-interval'>";
TimeConfHTML += "<option value=60>Hourly</option>";
TimeConfHTML += "<option value=14400>Daily</option>";
TimeConfHTML += "<option value=10080>Weekly</option>";
TimeConfHTML += "</select><br>";
#endif

TimeConfHTML += "</div>";

Expand Down Expand Up @@ -251,7 +255,11 @@ namespace WiFiManagerNS
NTPEnabled = false;
}
if( _NTPEnabled != NTPEnabled ) {
prefs::setBool("NTPEnabled", NTPEnabled );
#if defined ESP32
prefs::setBool("NTPEnabled", NTPEnabled );
#else
prefs::setPref(prefs::NTP_ENABLED, NTPEnabled );
#endif
}

if( _wifiManager->server->hasArg("timezone") ) {
Expand Down Expand Up @@ -290,7 +298,9 @@ namespace WiFiManagerNS
default:
serverInterval = 14400;
}
NTP::setSyncDelay( serverInterval );
#if defined ESP32
NTP::setSyncDelay( serverInterval );
#endif
}
}

Expand Down
Loading

0 comments on commit 6c23539

Please sign in to comment.