#include <WiFi.h>
#include <NTPClient.h>
#include <TimeLib.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include "secrets.h"
// --- Nyilvános Konfiguráció ---
const char* NTP_SERVER = "pool.ntp.org";
const char* WEATHER_API_URL = "http://api.openweathermap.org/data/2.5/weather?";
const char* LATITUDE = "47.4979"; // Budapest
const char* LONGITUDE = "19.0402"; // Budapest
// --- Állapot Változók ---
bool synced_today = false;
long timezone_sec = 0;
long local_sunrise_epoch = 0;
long local_sunset_epoch = 0;
WiFiUDP ntpUDP;
NTPClient utc(ntpUDP, NTP_SERVER);
void fetchWeatherData() {
HTTPClient http;
Serial.println("Napkelte, napnyugta, időzóna eltolás lekérdezés.");
String url = String(WEATHER_API_URL) + "lat=" + LATITUDE + "&lon=" + LONGITUDE + "&units=metric&appid=" + API_KEY;
http.begin(url);
int httpCode = http.GET();
Serial.print("HTTP kód: ");
Serial.println(httpCode);
if (httpCode > 0) {
String JSON_Data = http.getString();
DynamicJsonDocument doc(2048);
DeserializationError error = deserializeJson(doc, JSON_Data);
if (error) {
Serial.print(F("deserializeJson() hiba: "));
Serial.println(error.f_str());
http.end();
return;
}
JsonObject obj = doc.as<JsonObject>();
timezone_sec = obj["timezone"].as<long>();
local_sunrise_epoch = timezone_sec + obj["sys"]["sunrise"].as<long>();
local_sunset_epoch = timezone_sec + obj["sys"]["sunset"].as<long>();
} else {
Serial.println("\n--- Hiba az adatok lekérésekor! ---");
Serial.print("HTTP hiba kód: ");
Serial.println(httpCode);
}
http.end();
}
void synchronization() {
Serial.print("Kapcsolódás a WiFihez (");
Serial.print(WIFI_SSID);
Serial.print(")...");
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
if (WiFi.waitForConnectResult(10000) != WL_CONNECTED) {
Serial.println("\nWiFi csatlakozás sikertelen!");
synced_today = false;
return;
}
Serial.println("WiFi csatlakoztatva!");
Serial.print("IP cím: ");
Serial.println(WiFi.localIP());
utc.begin();
Serial.print("Idő szinkronizálása...");
if (utc.forceUpdate()) {
Serial.println(" SIKERES!");
fetchWeatherData();
setTime(utc.getEpochTime() + timezone_sec);
synced_today = true;
} else {
Serial.println(" SIKERTELEN!");
synced_today = false;
}
utc.end();
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
Serial.println("WiFi kapcsolat bontva!");
}
void printTime(long ido) {
tmElements_t tm;
breakTime(ido, tm);
Serial.printf("%d:%02d\n", tm.Hour, tm.Minute);
}
void setup() {
Serial.begin(115200);
synchronization();
Serial.print("Napkelte: ");
printTime(local_sunrise_epoch);
Serial.print("Napnyugta: ");
printTime(local_sunset_epoch);
}
void loop() {
if ((utc.getHours()==0) && synced_today) synced_today = false;
if ((utc.getHours()==1) && (utc.getMinutes()==1) && !synced_today) synchronization();
Serial.printf("UTC idő: %02d:%02d:%02d Helyi idő: %d:%02d:%02d\n",
utc.getHours(), utc.getMinutes(), utc.getSeconds(),
hour(), minute(), second());
delay(1000);
}
#include <NTPClient.h>
#include <TimeLib.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include "secrets.h"
// --- Nyilvános Konfiguráció ---
const char* NTP_SERVER = "pool.ntp.org";
const char* WEATHER_API_URL = "http://api.openweathermap.org/data/2.5/weather?";
const char* LATITUDE = "47.4979"; // Budapest
const char* LONGITUDE = "19.0402"; // Budapest
// --- Állapot Változók ---
bool synced_today = false;
long timezone_sec = 0;
long local_sunrise_epoch = 0;
long local_sunset_epoch = 0;
WiFiUDP ntpUDP;
NTPClient utc(ntpUDP, NTP_SERVER);
void fetchWeatherData() {
HTTPClient http;
Serial.println("Napkelte, napnyugta, időzóna eltolás lekérdezés.");
String url = String(WEATHER_API_URL) + "lat=" + LATITUDE + "&lon=" + LONGITUDE + "&units=metric&appid=" + API_KEY;
http.begin(url);
int httpCode = http.GET();
Serial.print("HTTP kód: ");
Serial.println(httpCode);
if (httpCode > 0) {
String JSON_Data = http.getString();
DynamicJsonDocument doc(2048);
DeserializationError error = deserializeJson(doc, JSON_Data);
if (error) {
Serial.print(F("deserializeJson() hiba: "));
Serial.println(error.f_str());
http.end();
return;
}
JsonObject obj = doc.as<JsonObject>();
timezone_sec = obj["timezone"].as<long>();
local_sunrise_epoch = timezone_sec + obj["sys"]["sunrise"].as<long>();
local_sunset_epoch = timezone_sec + obj["sys"]["sunset"].as<long>();
} else {
Serial.println("\n--- Hiba az adatok lekérésekor! ---");
Serial.print("HTTP hiba kód: ");
Serial.println(httpCode);
}
http.end();
}
void synchronization() {
Serial.print("Kapcsolódás a WiFihez (");
Serial.print(WIFI_SSID);
Serial.print(")...");
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
if (WiFi.waitForConnectResult(10000) != WL_CONNECTED) {
Serial.println("\nWiFi csatlakozás sikertelen!");
synced_today = false;
return;
}
Serial.println("WiFi csatlakoztatva!");
Serial.print("IP cím: ");
Serial.println(WiFi.localIP());
utc.begin();
Serial.print("Idő szinkronizálása...");
if (utc.forceUpdate()) {
Serial.println(" SIKERES!");
fetchWeatherData();
setTime(utc.getEpochTime() + timezone_sec);
synced_today = true;
} else {
Serial.println(" SIKERTELEN!");
synced_today = false;
}
utc.end();
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
Serial.println("WiFi kapcsolat bontva!");
}
void printTime(long ido) {
tmElements_t tm;
breakTime(ido, tm);
Serial.printf("%d:%02d\n", tm.Hour, tm.Minute);
}
void setup() {
Serial.begin(115200);
synchronization();
Serial.print("Napkelte: ");
printTime(local_sunrise_epoch);
Serial.print("Napnyugta: ");
printTime(local_sunset_epoch);
}
void loop() {
if ((utc.getHours()==0) && synced_today) synced_today = false;
if ((utc.getHours()==1) && (utc.getMinutes()==1) && !synced_today) synchronization();
Serial.printf("UTC idő: %02d:%02d:%02d Helyi idő: %d:%02d:%02d\n",
utc.getHours(), utc.getMinutes(), utc.getSeconds(),
hour(), minute(), second());
delay(1000);
}
Nincsenek megjegyzések:
Megjegyzés küldése