Lompat ke konten utama
Iklan

Cara Mengirim Notifikasi Telegram dari ESP8266

Aplikasi Blynk di artikel monitoring suhu online bagus untuk memantau data kapan saja, tapi Anda harus aktif membuka aplikasinya. Untuk kondisi darurat — suhu terlalu panas, pintu tak terkunci, air mulai naik — yang dibutuhkan adalah notifikasi yang mendorong dirinya sendiri ke HP Anda. Di situlah bot Telegram unggul: gratis, tanpa iklan, dan pesannya masuk secepat chat biasa.

Kenapa Telegram, Bukan WhatsApp

WhatsApp tidak punya API resmi gratis untuk perangkat hobi seperti Arduino. Telegram sebaliknya menyediakan Bot API resmi, gratis, dan tanpa batas jumlah pesan yang wajar untuk proyek pribadi. Anda cukup membuat satu bot lewat obrolan dengan akun khusus bernama BotFather, dan bot itu bisa langsung mengirim pesan ke Anda hanya dengan permintaan HTTP sederhana — persis jenis permintaan yang bisa dibuat ESP8266.

ESP8266 baca sensor HTTPS Telegram Bot API server Telegram (gratis, resmi) push HP Anda notifikasi masuk seperti chat biasa ESP8266 mengirim permintaan HTTP ke Bot API, Telegram yang mendorong pesan ke HP Anda

Langkah 1: Membuat Bot Telegram

  1. Buka Telegram, cari akun @BotFather, mulai obrolan.
  2. Ketik /newbot, ikuti instruksi untuk memberi nama dan username bot (harus diakhiri kata bot, misalnya SuhuRumahBot).
  3. BotFather akan membalas dengan sebuah token, formatnya seperti 123456789:AAExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Simpan baik-baik, token ini setara password bot Anda.
  4. Cari bot yang baru dibuat berdasarkan username-nya, klik Start supaya bot bisa mengirim pesan ke Anda.

Langkah 2: Mendapatkan Chat ID Anda

Bot butuh tahu ke mana pesan dikirim. Caranya:

  1. Kirim pesan apa saja ke bot Anda (misalnya "halo").
  2. Buka browser, kunjungi:
    https://api.telegram.org/bot<TOKEN_ANDA>/getUpdates
  3. Cari bagian "chat":{"id":XXXXXXXXX pada hasil JSON yang muncul. Angka itu adalah Chat ID Anda.

Alat dan Bahan

KomponenJumlahCatatan
NodeMCU ESP82661Terhubung ke WiFi 2,4 GHz
Sensor DHT11/DHT22 (opsional)1Untuk contoh notifikasi berbasis suhu
Sensor PIR (opsional)1Untuk contoh notifikasi deteksi gerakan

Memasang Library

Buka Sketch → Include Library → Manage Libraries, cari dan pasang:

  • UniversalTelegramBot (oleh Brian Lough)
  • ArduinoJson (dependensi wajib untuk library di atas, versi 6.x)

Kode Dasar: Kirim Satu Pesan

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

const char* ssid = "NAMA_WIFI_ANDA";
const char* password = "PASSWORD_WIFI_ANDA";

#define BOT_TOKEN "TOKEN_BOT_ANDA"
#define CHAT_ID   "CHAT_ID_ANDA"

WiFiClientSecure clientTelegram;
UniversalTelegramBot bot(BOT_TOKEN, clientTelegram);

void setup() {
  Serial.begin(9600);
  clientTelegram.setInsecure(); // lewati verifikasi sertifikat, cukup untuk proyek hobi

  WiFi.begin(ssid, password);
  Serial.print("Menghubungkan WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nTerhubung! IP: " + WiFi.localIP().toString());

  bot.sendMessage(CHAT_ID, "ESP8266 baru saja menyala dan siap memantau.", "");
}

void loop() {
  // kosong untuk contoh dasar ini
}

Kalau pesan "ESP8266 baru saja menyala..." muncul di Telegram Anda begitu board dinyalakan, seluruh koneksi sudah benar dan Anda tinggal menambah logika kapan pesan berikutnya dikirim.

Contoh Nyata: Peringatan Suhu Berlebih

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <DHT.h>

const char* ssid = "NAMA_WIFI_ANDA";
const char* password = "PASSWORD_WIFI_ANDA";
#define BOT_TOKEN "TOKEN_BOT_ANDA"
#define CHAT_ID   "CHAT_ID_ANDA"

WiFiClientSecure clientTelegram;
UniversalTelegramBot bot(BOT_TOKEN, clientTelegram);

#define DHTPIN 2
DHT dht(DHTPIN, DHT11);

const float batasSuhu = 35.0;
bool sudahKirimPeringatan = false;
unsigned long waktuCekTerakhir = 0;

void setup() {
  Serial.begin(9600);
  dht.begin();
  clientTelegram.setInsecure();
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);
}

void loop() {
  if (millis() - waktuCekTerakhir > 10000) { // cek tiap 10 detik
    waktuCekTerakhir = millis();
    float suhu = dht.readTemperature();

    if (!isnan(suhu)) {
      if (suhu >= batasSuhu && !sudahKirimPeringatan) {
        String pesan = "Peringatan! Suhu ruangan mencapai " + String(suhu, 1) + " C";
        bot.sendMessage(CHAT_ID, pesan, "");
        sudahKirimPeringatan = true;   // cegah spam pesan berulang
      }
      else if (suhu < batasSuhu - 2) {
        sudahKirimPeringatan = false;  // reset setelah suhu turun cukup jauh
      }
    }
  }
}

Perhatikan variabel sudahKirimPeringatan. Tanpa penanda ini, bot akan mengirim pesan yang sama setiap 10 detik selama suhu masih di atas ambang — HP Anda akan dibanjiri notifikasi identik. Ambang turun juga sengaja dibuat 2 derajat lebih rendah dari ambang naik (teknik histeresis yang sama seperti di artikel relay untuk lampu otomatis), supaya notifikasi tidak bolak-balik terkirim saat suhu berosilasi tepat di angka 35.

Menerima Perintah dari Telegram

Bot juga bisa menerima perintah balik dari Anda, misalnya mengetik /status untuk meminta suhu saat ini:

void loop() {
  int jumlahPesanBaru = bot.getUpdates(bot.last_message_received + 1);

  while (jumlahPesanBaru) {
    for (int i = 0; i < jumlahPesanBaru; i++) {
      String teks = bot.messages[i].text;
      String idPengirim = bot.messages[i].chat_id;

      if (teks == "/status") {
        float suhu = dht.readTemperature();
        String balasan = "Suhu saat ini: " + String(suhu, 1) + " C";
        bot.sendMessage(idPengirim, balasan, "");
      }
    }
    jumlahPesanBaru = bot.getUpdates(bot.last_message_received + 1);
  }

  delay(1000);
}

Metode getUpdates ini disebut polling — ESP8266 bertanya ke server Telegram setiap beberapa detik apakah ada pesan baru. Untuk proyek hobi ini cukup, meski sedikit lebih lambat dibanding webhook yang dipakai server-server besar.

Masalah yang Sering Muncul

GejalaPenyebab dan Solusi
Tidak ada pesan sama sekali yang masuk Pastikan Anda sudah menekan Start di obrolan bot. Bot tidak bisa memulai percakapan duluan.
Chat ID tidak ditemukan di hasil getUpdates Kirim ulang pesan ke bot tepat sebelum membuka URL getUpdates — hasil lama akan kosong jika sudah pernah dibaca.
Error kompilasi terkait ArduinoJson Versi library tidak cocok. UniversalTelegramBot versi terbaru butuh ArduinoJson versi 6, bukan versi 5.
ESP8266 tersendat atau restart saat mengirim pesan Koneksi HTTPS ke server Telegram cukup berat untuk RAM ESP8266. Hindari memanggil sendMessage terlalu sering, beri jeda minimal beberapa detik.

Langkah Selanjutnya

Gabungkan notifikasi ini dengan proyek sensor lain di blog ini: kirim pesan saat sensor PIR mendeteksi gerakan di malam hari, atau saat pembacaan sensor ultrasonik menunjukkan air di bak penampungan sudah hampir penuh. Polanya selalu sama: baca sensor, bandingkan dengan ambang, kirim pesan sekali saja per kejadian.

Iklan
0 Komentar

Berkomentarlah dengan sopan dan menggunakan bahasa yang semestinya.