#include <WiFi.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
#include <HTTPClient.h>
const String url = "https://data.bmkg.go.id/DataMKG/TEWS/autogempa.json";
#include <ArduinoJson.h>
#include <TimeLib.h> // library untuk Time
#include <WiFiUdp.h>
#include <NTPClient.h>
// Konfigurasi NTP Client
const char* ntpServer = "pool.ntp.org";
const int timeZone = 7; // Waktu Indonesia Barat (WIB) adalah UTC+7
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, ntpServer, timeZone * 3600, 60000);
void setup() {
Serial.begin(115200);
// Menghubungkan ke WiFi
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("OK! IP=");
Serial.println(WiFi.localIP());
// HTTP GET REQUEST
HTTPClient http;
http.begin(url,80);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("HTTP ");
Serial.println(httpResponseCode);
String payload = http.getString();
Serial.println();
Serial.println(payload);
// ARDUINO JSON
StaticJsonDocument<1024> doc;
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return;
}
JsonObject Infogempa_gempa = doc["Infogempa"]["gempa"];
const char* Infogempa_gempa_Tanggal = Infogempa_gempa["Tanggal"]; // "04 Agu 2023"
const char* Infogempa_gempa_Jam = Infogempa_gempa["Jam"]; // "18:48:38 WIB"
const char* Infogempa_gempa_DateTime = Infogempa_gempa["DateTime"]; // "2023-08-04T11:48:38+00:00"
const char* Infogempa_gempa_Coordinates = Infogempa_gempa["Coordinates"]; // "-0.21,125.03"
const char* Infogempa_gempa_Lintang = Infogempa_gempa["Lintang"]; // "0.21 LS"
const char* Infogempa_gempa_Bujur = Infogempa_gempa["Bujur"]; // "125.03 BT"
const char* Infogempa_gempa_Magnitude = Infogempa_gempa["Magnitude"]; // "6.0"
const char* Infogempa_gempa_Kedalaman = Infogempa_gempa["Kedalaman"]; // "10 km"
const char* Infogempa_gempa_Wilayah = Infogempa_gempa["Wilayah"]; // "Pusat gempa berada di laut 117 km ..."
const char* Infogempa_gempa_Potensi = Infogempa_gempa["Potensi"]; // "Gempa ini dirasakan untuk ..."
const char* Infogempa_gempa_Dirasakan = Infogempa_gempa["Dirasakan"]; // "III - IV Bone Bolango, III - ..."
const char* Infogempa_gempa_Shakemap = Infogempa_gempa["Shakemap"]; // "20230804184838.mmi.jpg"
Serial.println(Infogempa_gempa_Tanggal);
Serial.println(Infogempa_gempa_Jam);
Serial.println(Infogempa_gempa_DateTime);
Serial.println(Infogempa_gempa_Wilayah);
// Parsing tanggal dan waktu dari NTP
timeClient.begin();
while (!timeClient.update()) {
timeClient.forceUpdate();
}
int ntpYear = year(timeClient.getEpochTime());
int ntpMonth = month(timeClient.getEpochTime());
int ntpDay = day(timeClient.getEpochTime());
int ntpHour = hour(timeClient.getEpochTime());
int ntpMinute = minute(timeClient.getEpochTime());
int ntpSecond = second(timeClient.getEpochTime());
// Parsing tanggal dan waktu dari data gempa
int gempaYear, gempaMonth, gempaDay, gempaHour, gempaMinute, gempaSecond;
sscanf(Infogempa_gempa_DateTime, "%d-%d-%dT%d:%d:%d", &gempaYear, &gempaMonth, &gempaDay, &gempaHour, &gempaMinute, &gempaSecond);
// Perhitungan selisih waktu
int selisihYear = ntpYear - gempaYear;
int selisihMonth = ntpMonth - gempaMonth;
int selisihDay = ntpDay - gempaDay;
int selisihHour = ntpHour - gempaHour;
int selisihMinute = ntpMinute - gempaMinute;
int selisihSecond = ntpSecond - gempaSecond;
Serial.println("Selisih waktu (tahun-bulan-hari jam:menit:detik):");
Serial.print(selisihYear);
Serial.print("-");
Serial.print(selisihMonth);
Serial.print("-");
Serial.print(selisihDay);
Serial.print(" ");
Serial.print(selisihHour);
Serial.print(":");
Serial.print(selisihMinute);
Serial.print(":");
Serial.println(selisihSecond);
// Pengecekan wilayah (misalnya: wilayah di Jawa Barat)
if (strstr(Infogempa_gempa_Wilayah, "Jawa Barat") != NULL) {
Serial.println("Gempa terjadi di wilayah Jawa Barat");
} else {
Serial.println("Gempa terjadi di wilayah lain");
}
} else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
Serial.println(":-(");
}
}
void loop() {
// Update waktu NTP setiap loop (dapat diatur lebih jarang jika diperlukan)
timeClient.update();
delay(100);
}