#include <ESP8266WiFi.h> // Memasukkan library NodeMCU
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <TimeLib.h> // Library tambahan untuk bekerja dengan waktu
#define matikanrelay digitalWrite(0,LOW)
#define hidupkanrelay digitalWrite(0,HIGH)
int saklaroff;
const char* ssid = "your_wifi_ssid"; // Ganti dengan SSID WiFi Anda
const char* pasw = "your_wifi_password"; // Ganti dengan password WiFi Anda
WiFiServer server(80); // HTTP server pada port 80
// Membuat instance UDP dan NTP Client
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 25200); // GMT+7 (25200 detik offset dari UTC)
int hidupkanJam = 8; // Jam untuk menyalakan relay (contoh: jam 08:00)
int matikanJam = 20; // Jam untuk mematikan relay (contoh: jam 20:00)
void setup() {
Serial.begin(115200);
// Menghubungkan ke WiFi router
WiFi.begin(ssid, pasw);
// Tunggu hingga terhubung ke WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Menghubungkan ke WiFi...");
}
// Setelah terhubung, cetak IP address ke Serial Monitor
Serial.println("Terhubung ke WiFi");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
// Memulai server HTTP
server.begin();
// Mengatur pin mode untuk relay
pinMode(0, OUTPUT);
// Memulai NTP Client untuk mendapatkan waktu
timeClient.begin();
timeClient.update();
}
void loop() {
// Memperbarui waktu dari NTP server
timeClient.update();
// Mendapatkan jam saat ini dari waktu NTP
int currentHour = timeClient.getHours();
Serial.print("Jam saat ini: ");
Serial.println(currentHour);
// Cek apakah jam saat ini sesuai dengan jadwal untuk hidupkan relay
if (currentHour == hidupkanJam) {
hidupkanrelay;
Serial.println("Relay dihidupkan otomatis berdasarkan jadwal.");
}
// Cek apakah jam saat ini sesuai dengan jadwal untuk matikan relay
if (currentHour == matikanJam) {
matikanrelay;
Serial.println("Relay dimatikan otomatis berdasarkan jadwal.");
}
// Server HTTP untuk mengendalikan relay secara manual
WiFiClient client = server.available();
if (client) {
String request = client.readStringUntil('\r'); // Membaca permintaan HTTP hingga karakter '\r'
Serial.println("********************************");
Serial.println("Dari client: " + request);
client.flush();
// Mengecek apakah permintaan HTTP berisi perintah tertentu
if (request.indexOf("337337") != -1) {
client.println("ding"); // Mengirim balasan ke client
String strPerintah = request.substring(11, request.indexOf("HTTP/1.1"));
// Cek perintah untuk menghidupkan/mematikan relay
if (request.indexOf("balk") != -1) {
if (saklaroff) {
hidupkanrelay; // Menghidupkan relay
} else {
matikanrelay; // Mematikan relay
}
}
if (request.indexOf("hdmn") != -1) {
hidupkanrelay; // Menghidupkan relay
}
if (request.indexOf("mtmn") != -1) {
matikanrelay; // Mematikan relay
}
}
}
// Delay sedikit untuk stabilitas
delay(1000);
}