FAN RADIATOR TELEGWEMOS 2 WIFI
//*FAN
RADIATOR TELEGWEMOS 2 WIFI*
//*IoT
FAN PC - PROJECT ON JUNI 2024- Ide and Design Dunia_budi*
//*DATA
TELEGRAM to GOOGLE SHEETS*
//*SETIAP
3 MENIT RELAY ON DAN OFF*
//*Per
15 menit notif to Telegram*
//*Version
1.2*LEBIH CEPAT
#include
<ESP8266WiFi.h>
#include
<WiFiClientSecure.h>
#include
<UniversalTelegramBot.h>
#include
<ArduinoJson.h>
//
Wi-Fi settings
const
char* ssid1 = "Indonesia1";
const
char* password1 = "Rum4hku1";
const
char* ssid2 = "MEDIA_BARU";
const
char* password2 = "Tvri1234";
//
Telegram settings
#define
BOTtoken "12345678:XXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
// isikan bot telegram groupmu
#define
groupID "-100xxxxxxxxxxxxxxx"
const
char* googleScriptUrl =
"https://script.google.com/macros/s/AKfxxxxxxxxxxxxxxx";
//
Pin definitions for Lolin WeMos D1
const
int relayPin = D1; // GPIO5
const
int ledPin = D2; // GPIO2
//
State variables
bool
relayState = LOW;
bool
ledState = HIGH; // Start with LED off (active LOW)
unsigned
long previousMillis = 0;
unsigned
long previousLedMillis = 0;
unsigned
long lastTelegramNotification = 0;
//
Intervals
const
unsigned long RELAY_INTERVAL = 3 * 60 * 1000; // 3 minutes
const
unsigned long LED_INTERVAL = 1000; // 1 second
const
unsigned long TELEGRAM_NOTIFICATION_INTERVAL = 15 * 60 * 1000; // 15 minutes
WiFiClientSecure
client;
UniversalTelegramBot
bot(BOTtoken, client);
void
setup() {
Serial.begin(115200);
pinMode(relayPin, OUTPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(relayPin, relayState);
digitalWrite(ledPin, ledState); // Turn off LED (it's active LOW)
connectToWiFi();
client.setInsecure(); // Use this for simplicity, but consider using a proper
certificate in production
sendTelegramMessage("Fan IoT PC active");
sendToGoogleSheets("Fan IoT PC active");
}
void
loop() {
unsigned long currentMillis = millis();
// Toggle relay every RELAY_INTERVAL
if (currentMillis - previousMillis >= RELAY_INTERVAL) {
previousMillis = currentMillis;
toggleRelay();
}
// Blink LED
if (currentMillis - previousLedMillis >= LED_INTERVAL) {
previousLedMillis = currentMillis;
blinkLed();
}
// Send periodic Telegram notification
if (currentMillis - lastTelegramNotification >= TELEGRAM_NOTIFICATION_INTERVAL)
{
lastTelegramNotification = currentMillis;
sendPeriodicTelegramNotification();
}
}
void
connectToWiFi() {
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Scanning for Wi-Fi networks...");
int numberOfNetworks = WiFi.scanNetworks();
for (int i = 0; i < numberOfNetworks; i++) {
String ssid = WiFi.SSID(i);
if (ssid == ssid1) {
WiFi.begin(ssid1, password1);
Serial.println("Connecting to " + String(ssid1));
if (waitForConnection()) return;
} else if (ssid == ssid2) {
WiFi.begin(ssid2, password2);
Serial.println("Connecting to " + String(ssid2));
if (waitForConnection()) return;
}
}
Serial.println("Failed to connect to any Wi-Fi network");
}
bool
waitForConnection() {
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
delay(500);
Serial.print(".");
blinkLed(); // Blink LED while connecting
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nConnected to Wi-Fi");
return true;
}
Serial.println("\nConnection failed");
return false;
}
void
toggleRelay() {
relayState = !relayState;
digitalWrite(relayPin, relayState);
String status = relayState ? "Position Fan ON" : "Position Fan
OFF";
sendToGoogleSheets(status);
}
void
blinkLed() {
ledState = !ledState;
digitalWrite(ledPin, ledState);
Serial.println(ledState ? "LED ON" : "LED OFF"); // Debug
output
}
void
sendPeriodicTelegramNotification() {
String status = relayState ? "Position Fan ON" : "Position Fan
OFF";
sendTelegramMessage(status);
}
void
sendTelegramMessage(String message) {
bot.sendMessage(groupID, message, "");
}
String
urlEncode(const String &str) {
String encodedString = "";
char c;
char code0;
char code1;
for (int i = 0; i < str.length(); i++) {
c = str.charAt(i);
if (c == ' ') {
encodedString += '+';
} else if (isalnum(c)) {
encodedString += c;
} else {
code1 = (c & 0xf) + '0';
if ((c & 0xf) > 9) {
code1 = (c & 0xf) - 10 + 'A';
}
c = (c >> 4) & 0xf;
code0 = c + '0';
if (c > 9) {
code0 = c - 10 + 'A';
}
encodedString += '%';
encodedString += code0;
encodedString += code1;
}
}
return encodedString;
}
void
sendToGoogleSheets(String status) {
if (WiFi.status() == WL_CONNECTED) {
String url = String(googleScriptUrl) + "?status=" +
urlEncode(status);
client.connect("script.google.com", 443);
client.print(String("GET ") + url + " HTTP/1.1\r\n"
+
"Host:
script.google.com\r\n" +
"User-Agent:
ESP8266\r\n" +
"Connection:
close\r\n\r\n");
while (client.connected()) {
String line = client.readStringUntil('\n');
if (line == "\r") {
break;
}
}
String response = client.readString();
Serial.println(response);
}
}