From b8de4ed97ae24a398b8baacbbe01ecb598ee6860 Mon Sep 17 00:00:00 2001 From: IndraWIjaya Date: Mon, 22 Jul 2024 12:06:42 +0700 Subject: [PATCH] Upload files to "final.ino" --- final.ino/final3.ino | 281 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 final.ino/final3.ino diff --git a/final.ino/final3.ino b/final.ino/final3.ino new file mode 100644 index 0000000..29d9a48 --- /dev/null +++ b/final.ino/final3.ino @@ -0,0 +1,281 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Definitions and initializations +RTC_DS3231 rtc; +unsigned long BotLastMessageReceivedTime; + +#define DHTPIN 4 +#define DHTTYPE DHT22 +DHT dht(DHTPIN, DHTTYPE); + +#define RELAY1_PIN 27 +#define RELAY2_PIN 32 +#define RELAY3_PIN 18 +#define RELAY4_PIN 33 + +LiquidCrystal_I2C lcd(0x27, 16, 2); + +#define CHAT_ID "6261768108" +#define BOT_TOKEN "7346491961:AAEE0IcO8oXWjEWRCRyFR5HyHSlrtjzjAgk" +WiFiClientSecure secured_client; +UniversalTelegramBot bot(BOT_TOKEN, secured_client); + +const char* ssid = "Bismillah"; +const char* password = "Alhamdulillah"; + +WiFiUDP ntpUDP; +NTPClient timeClient(ntpUDP, "pool.ntp.org", 25200, 60000); // 25200 for GMT+7 (WIB) + +// Variables to store relay states +bool relay1ManualMode = false; +bool relay2ManualMode = false; +bool relay3ManualMode = false; +bool relay4ManualMode = false; + +// Variables to store manual schedules +int relay4Hour = 20; +int relay4MinuteStart = 50; +int relay4MinuteEnd = 0; + +// Function to handle new messages from the Telegram bot +void handleNewMessages(int numNewMessages) { + Serial.println("handleNewMessages"); + for (int i = 0; i < numNewMessages; i++) { + String text = bot.messages[i].text; + Serial.println(text); + String from_name = bot.messages[i].from_name; + + if (text == "/start") { + String welcome = "Selamat datang di Bot Pengontrol Relay!\n"; + welcome += "Gunakan perintah-perintah berikut untuk mengontrol relay:\n\n"; + welcome += "/relay1_on untuk mengaktifkan Sprayer\n"; + welcome += "/relay1_off untuk menonaktifkan Sprayer\n"; + welcome += "/relay1_manual untuk mengatur Sprayer ke mode manual\n"; + welcome += "/relay1_auto untuk mengatur Sprayer ke mode otomatis\n"; + welcome += "/relay2_on untuk mengaktifkan Kipas\n"; + welcome += "/relay2_off untuk menonaktifkan Kipas\n"; + welcome += "/relay2_manual untuk mengatur Kipas ke mode manual\n"; + welcome += "/relay2_auto untuk mengatur Kipas ke mode otomatis\n"; + welcome += "/relay3_on untuk mengaktifkan Lampu UV\n"; + welcome += "/relay3_off untuk menonaktifkan Lampu UV\n"; + welcome += "/relay3_manual untuk mengatur Lampu UV ke mode manual\n"; + welcome += "/relay3_auto untuk mengatur Lampu UV ke mode otomatis\n"; + welcome += "/relay4_on untuk mengaktifkan Irigasi\n"; + welcome += "/relay4_off untuk menonaktifkan Irigasi\n"; + welcome += "/relay4_manual untuk mengatur Irigasi ke mode manual\n"; + welcome += "/relay4_auto untuk mengatur Irigasi ke mode otomatis\n"; + welcome += "/set_relay4_schedule HH:MM HH:MM untuk mengatur jadwal Irigasi\n"; + welcome += "/suhu untuk melihat suhu saat ini\n"; + bot.sendMessage(CHAT_ID, welcome, ""); + } + else if (text == "/relay1_on") { + digitalWrite(RELAY1_PIN, HIGH); + relay1ManualMode = true; + bot.sendMessage(CHAT_ID, "Sprayer telah diaktifkan.", ""); + } + else if (text == "/relay1_off") { + digitalWrite(RELAY1_PIN, LOW); + relay1ManualMode = true; + bot.sendMessage(CHAT_ID, "Sprayer telah dinonaktifkan.", ""); + } + else if (text == "/relay1_manual") { + relay1ManualMode = true; + bot.sendMessage(CHAT_ID, "Sprayer diatur ke mode manual.", ""); + } + else if (text == "/relay1_auto") { + relay1ManualMode = false; + bot.sendMessage(CHAT_ID, "Sprayer diatur ke mode otomatis.", ""); + } + else if (text == "/relay2_on") { + digitalWrite(RELAY2_PIN, HIGH); + relay2ManualMode = true; + bot.sendMessage(CHAT_ID, "Kipas telah diaktifkan.", ""); + } + else if (text == "/relay2_off") { + digitalWrite(RELAY2_PIN, LOW); + relay2ManualMode = true; + bot.sendMessage(CHAT_ID, "Kipas telah dinonaktifkan.", ""); + } + else if (text == "/relay2_manual") { + relay2ManualMode = true; + bot.sendMessage(CHAT_ID, "Kipas diatur ke mode manual.", ""); + } + else if (text == "/relay2_auto") { + relay2ManualMode = false; + bot.sendMessage(CHAT_ID, "Kipas diatur ke mode otomatis.", ""); + } + else if (text == "/relay3_on") { + digitalWrite(RELAY3_PIN, HIGH); + relay3ManualMode = true; + bot.sendMessage(CHAT_ID, "Lampu UV telah diaktifkan.", ""); + } + else if (text == "/relay3_off") { + digitalWrite(RELAY3_PIN, LOW); + relay3ManualMode = true; + bot.sendMessage(CHAT_ID, "Lampu UV telah dinonaktifkan.", ""); + } + else if (text == "/relay3_manual") { + relay3ManualMode = true; + bot.sendMessage(CHAT_ID, "Lampu UV diatur ke mode manual.", ""); + } + else if (text == "/relay3_auto") { + relay3ManualMode = false; + bot.sendMessage(CHAT_ID, "Lampu UV diatur ke mode otomatis.", ""); + } + else if (text == "/relay4_on") { + digitalWrite(RELAY4_PIN, HIGH); + relay4ManualMode = true; + bot.sendMessage(CHAT_ID, "Irigasi telah diaktifkan.", ""); + } + else if (text == "/relay4_off") { + digitalWrite(RELAY4_PIN, LOW); + relay4ManualMode = true; + bot.sendMessage(CHAT_ID, "Irigasi telah dinonaktifkan.", ""); + } + else if (text == "/relay4_manual") { + relay4ManualMode = true; + bot.sendMessage(CHAT_ID, "Irigasi diatur ke mode manual.", ""); + } + else if (text == "/relay4_auto") { + relay4ManualMode = false; + bot.sendMessage(CHAT_ID, "Irigasi diatur ke mode otomatis.", ""); + } + else if (text.startsWith("/set_relay4_schedule")) { + int hour, startMinute, endMinute; + if (sscanf(text.c_str(), "/set_relay4_schedule %d:%d %d:%d", &hour, &startMinute, &hour, &endMinute) == 4) { + relay4Hour = hour; + relay4MinuteStart = startMinute; + relay4MinuteEnd = endMinute; + bot.sendMessage(CHAT_ID, "Jadwal Irigasi telah diubah.", ""); + } else { + bot.sendMessage(CHAT_ID, "Format jadwal tidak valid. Gunakan /set_Irigasi_schedule HH:MM HH:MM", ""); + } + } + else if (text == "/suhu") { + float currentTemperature = dht.readTemperature(); + if (!isnan(currentTemperature)) { + String message = "Suhu saat ini: " + String(currentTemperature) + " °C"; + bot.sendMessage(CHAT_ID, message, ""); + } else { + bot.sendMessage(CHAT_ID, "Gagal membaca suhu dari sensor DHT!", ""); + } + } + } +} + +// Function to connect to WiFi +void connectToWiFi() { + Serial.println("Connecting to WiFi..."); + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(1000); + Serial.println("Attempting to connect to WiFi..."); + } + + Serial.println("Connected to WiFi"); +} + +// Setup function +void setup() { + Serial.begin(115200); + pinMode(RELAY1_PIN, OUTPUT); + pinMode(RELAY2_PIN, OUTPUT); + pinMode(RELAY3_PIN, OUTPUT); + pinMode(RELAY4_PIN, OUTPUT); + + dht.begin(); + Serial.println("Sensor DHT diinisialisasi"); + + lcd.init(); + lcd.backlight(); + + connectToWiFi(); + secured_client.setInsecure(); // Disable certificate validation + + if (!rtc.begin()) { + Serial.println("Couldn't find RTC"); + while (1); + } + + // Initialize NTPClient + timeClient.begin(); + while (!timeClient.update()) { + timeClient.forceUpdate(); + } + + if (rtc.lostPower()) { + Serial.println("RTC lost power, let's set the time!"); + + // Get time from NTPClient + timeClient.update(); + unsigned long epochTime = timeClient.getEpochTime(); + rtc.adjust(DateTime(epochTime)); + } + + bot.sendMessage(CHAT_ID, "Bot started up", ""); +} + +// Loop function +void loop() { + float temperature = dht.readTemperature(); + + if (!isnan(temperature)) { + Serial.print("Temperature: "); + Serial.print(temperature); + Serial.println(" °C"); + if (!relay1ManualMode) { + digitalWrite(RELAY1_PIN, temperature > 32 ? HIGH : LOW); + } + if (!relay2ManualMode) { + digitalWrite(RELAY2_PIN, (temperature > 31 && temperature <= 32) ? HIGH : LOW); + } + if (!relay3ManualMode) { + digitalWrite(RELAY3_PIN, temperature < 28 ? HIGH : LOW); + } + } else { + Serial.println("Gagal membaca suhu dari sensor DHT!"); + } + + DateTime now = rtc.now(); + Serial.print("Current time: "); + Serial.print(now.hour()); + Serial.print(":"); + Serial.println(now.minute()); + + if (!relay4ManualMode) { + digitalWrite(RELAY4_PIN, (now.hour() == relay4Hour && now.minute() >= relay4MinuteStart && now.minute() <= relay4MinuteEnd) ? HIGH : LOW); + } + + int numNewMessages = bot.getUpdates(bot.last_message_received + 1); + Serial.println("Num : " + String(numNewMessages)); + if (numNewMessages) { + handleNewMessages(numNewMessages); + } + + lcd.setCursor(0, 0); + lcd.print("Suhu: "); + lcd.print(temperature); + lcd.print(" C"); + + lcd.setCursor(0, 1); + lcd.print("R1"); + lcd.print(digitalRead(RELAY1_PIN) ? "ON" : "OF"); + lcd.print("R2"); + lcd.print(digitalRead(RELAY2_PIN) ? "ON" : "OF"); + lcd.print("R3"); + lcd.print(digitalRead(RELAY3_PIN) ? "ON" : "OF"); + lcd.print("R4"); + lcd.print(digitalRead(RELAY4_PIN) ? "ON" : "OF"); + + delay(1000); +}