1
0
Weather_ESP/components/clock/clock.c

59 lines
1.4 KiB
C

/*
* clock.c
*
* Created on: Apr 23, 2020
* Author: chris
*/
#include "clock.h"
const char* TAG = "clock";
void time_sync_notification_cb(struct timeval *tv)
{
ESP_LOGI(TAG, "Synchronized time to PTB!");
}
esp_err_t init_clock()
{
ESP_LOGI(TAG, "Initializing SNTP");
esp_event_loop_create_default();
sntp_setoperatingmode(SNTP_OPMODE_POLL);
sntp_setservername(0, "ptbtime1.ptb.de");
sntp_set_time_sync_notification_cb(time_sync_notification_cb);
sntp_set_sync_mode(SNTP_SYNC_MODE_IMMED);
sntp_init();
// wait for time to be set
time_t now = 0;
struct tm timeinfo = { 0 };
int retry = 0;
const int retry_count = 10;
while (sntp_get_sync_status() == SNTP_SYNC_STATUS_RESET && ++retry < retry_count) {
ESP_LOGI(TAG, "Waiting for system time to be set... (%d/%d)", retry, retry_count);
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
time(&now);
localtime_r(&now, &timeinfo);
setenv("TZ", "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", 1);
tzset();
return ESP_OK;
}
void get_time(time_str_t* res)
{
time_t now;
struct tm timeinfo;
time(&now);
localtime_r(&now, &timeinfo);
char date_str[64];
char time_str[64];
strftime(date_str, sizeof(date_str), "%d.%m.%Y", &timeinfo);
strftime(time_str, sizeof(time_str), "%H:%M:%S", &timeinfo);
strcpy(res->date_str, date_str);
strcpy(res->time_str, time_str);
}