#include <ThingerESP32.h>
#define USERNAME "Faishalllll_"
#define DEVICE_ID "KontrolRelay"
#define DEVICE_CREDENTIAL "BafKY-jsy_9yQRM%"
#define SSID "Wokwi-GUEST"
#define SSID_PASSWORD ""
#define RELAY_COUNT 8
#define RELAY_PIN_1 2
#define RELAY_PIN_2 4
#define RELAY_PIN_3 5
#define RELAY_PIN_4 15
#define RELAY_PIN_5 18
#define RELAY_PIN_6 19
#define RELAY_PIN_7 21
#define RELAY_PIN_8 22
ThingerESP32 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
unsigned long startTime1 = 0; // Waktu mulai relay 1-4
unsigned long startTime2 = 0; // Waktu mulai relay 5-8
const unsigned long interval = 3600000 * 4; // Interval 4 jam dalam milidetik
const int GMT_OFFSET = 7 * 3600; // Offset GMT+7 dalam detik
void setup() {
// Inisialisasi pin sebagai output untuk relay
pinMode(RELAY_PIN_1, OUTPUT);
pinMode(RELAY_PIN_2, OUTPUT);
pinMode(RELAY_PIN_3, OUTPUT);
pinMode(RELAY_PIN_4, OUTPUT);
pinMode(RELAY_PIN_5, OUTPUT);
pinMode(RELAY_PIN_6, OUTPUT);
pinMode(RELAY_PIN_7, OUTPUT);
pinMode(RELAY_PIN_8, OUTPUT);
// Koneksi ke Thinger.io
thing.add_wifi(SSID, SSID_PASSWORD);
// Menambahkan resource untuk memantau status relay
thing["relay_state"] >> [](pson& out){
out["relay_1"] = RELAY_PIN_1;
out["relay_2"] = RELAY_PIN_2;
out["relay_3"] = RELAY_PIN_3;
out["relay_4"] = RELAY_PIN_4;
out["relay_5"] = RELAY_PIN_5;
out["relay_6"] = RELAY_PIN_6;
out["relay_7"] = RELAY_PIN_7;
out["relay_8"] = RELAY_PIN_8;
};
}
void loop() {
thing.handle();
unsigned long currentTime = millis() / 1000 + GMT_OFFSET; // Konversi ke detik dan tambahkan offset
// Periksa apakah sudah waktunya untuk mengaktifkan relay 1-4
if ((currentTime - startTime1 >= interval) || (startTime1 == 0)) {
startTime1 = currentTime;
digitalWrite(RELAY_PIN_1, HIGH);
digitalWrite(RELAY_PIN_2, HIGH);
digitalWrite(RELAY_PIN_3, HIGH);
digitalWrite(RELAY_PIN_4, HIGH);
}
// Periksa apakah sudah waktunya untuk mengaktifkan relay 5-8
if ((currentTime - startTime2 >= interval) || (startTime2 == 0)) {
startTime2 = currentTime;
digitalWrite(RELAY_PIN_5, HIGH);
digitalWrite(RELAY_PIN_6, HIGH);
digitalWrite(RELAY_PIN_7, HIGH);
digitalWrite(RELAY_PIN_8, HIGH);
}
// Periksa apakah sudah waktunya untuk mematikan relay 1-4
if (currentTime - startTime1 >= interval) {
digitalWrite(RELAY_PIN_1, LOW);
digitalWrite(RELAY_PIN_2, LOW);
digitalWrite(RELAY_PIN_3, LOW);
digitalWrite(RELAY_PIN_4, LOW);
}
// Periksa apakah sudah waktunya untuk mematikan relay 5-8
if (currentTime - startTime2 >= interval) {
digitalWrite(RELAY_PIN_5, LOW);
digitalWrite(RELAY_PIN_6, LOW);
digitalWrite(RELAY_PIN_7, LOW);
digitalWrite(RELAY_PIN_8, LOW);
}
}