Disusun Oleh:
| Muhammad Naufal Aziz | (24051204001) |
| Muhammad Rifqi Al Hafidh | (24051204009) |
| Ig. Krisna Wijaya Prihandono | (24051204032) |
| Ahmad Syihan Arijuddin | (24051204035) |
BAB I
PENDAHULUAN
1.1 Latar Belakang
Perkembangan teknologi Internet of Things (IoT) telah mengubah paradigma sistem p Perkembangan teknologi Internet of Things (IoT) telah mengubah lanskap pemantauan lingkungan dan otomasi industri secara mendasar. Sistem pemantauan jarak nirkabel memainkan peran krusial dalam berbagai aplikasi kritis, mulai dari deteksi rintangan pada kendaraan otonom, sistem keandalan navigasi robotika, pemantauan ketinggian air pada bendungan, hingga sistem keselamatan kerja industri. Penggunaan sensor ultrasonik seperti HC-SR04 yang terintegrasi dengan mikrokontroler canggih berfitur Wi-Fi seperti ESP32 memungkinkan akuisisi data jarak objek secara presisi dan terhubung langsung ke jaringan komputasi awan (cloud platform) tanpa memerlukan komputer perantara.
Meskipun deteksi lokal melalui indikator suara (buzzer) sangat berguna untuk peringatan jarak dekat secara fisik, sistem pemantauan modern menuntut adanya mekanisme peringatan jarak jauh (remote alert system) yang handal dan real-time. Platform IoT ThingsBoard Cloud menyediakan infrastruktur IoT yang sangat fleksibel dengan menyediakan fitur Rule Engine dan Rule Chain. Melalui fitur Rule Chain, data telemetri yang dikirimkan oleh ESP32 berupa data jarak dan status alarm tidak hanya disimpan ke dalam database time-series, tetapi juga dapat diproses secara logis untuk memicu notifikasi peringatan otomatis melalui surat elektronik (email) menggunakan protokol SMTP. Implementasi ini memastikan bahwa pengelola sistem atau teknisi lapangan menerima peringatan bahaya secara instan saat objek terdeteksi berada di bawah ambang batas aman (threshold) 15 cm.
1.2 Rumusan Masalah
Berdasarkan latar belakang tersebut, dirumuskan beberapa permasalahan utama sebagai berikut:
1.Bagaimana merancang dan mengonfigurasi perangkat keras ESP32, sensor ultrasonik HC-SR04, dan buzzer untuk akuisisi data jarak serta alur peringatan lokal?
2.Bagaimana menyusun program ESP32 untuk mentransmisikan data telemetri jarak dan status alarm dalam format JSON ke ThingsBoard Cloud menggunakan protokol MQTT secara berkelanjutan?
3.Bagaimana mengonfigurasi node-node pada Rule Chain ThingsBoard Cloud untuk memproses logika kriteria alarm dari data telemetri?
4.Bagaimana mengintegrasikan node To Email dan Send Email dengan SMTP server Gmail untuk mentransmisikan notifikasi peringatan email otomatis saat alarm aktif?
1.3 Tujuan Laporan
Tujuan penulisan laporan praktikum dan demonstrasi ini adalah:
1.Mengimplementasikan sistem pemantauan jarak berbasis mikrokontroler ESP32 dan sensor ultrasonik HC-SR04 secara akurat.
2.Mengirimkan data telemetri berformat JSON (distance dan alarm) secara terstruktur ke platform ThingsBoard Cloud melalui protokol MQTT.
3.Merancang alur pemrosesan Rule Chain pada ThingsBoard Cloud yang mencakup Message Type Switch, Save Timeseries, Switch (cekAlarm), To Email, Send Email, dan Log node.
4.Menguji keterhubungan notifikasi email otomatis via SMTP Gmail saat sensor mendeteksi objek pada jarak <= 15.0 cm.
1.4 Manfaat Penulisan
Penulisan laporan ini diharapkan memberikan manfaat teoritis dan praktis, di antaranya:
1.Memberikan pemahaman mendalam mengenai arsitektur telemetri IoT berbasis protokol MQTT dan pemrosesan peristiwa berbasis kejadian (event-driven rule chain).
2.Menyediakan panduan praktis dan terstruktur mengenai konfigurasi rutenotifikasi email otomatis pada platform ThingsBoard Cloud untuk sistem peringatan bahaya.
BAB II
TINJAUAN PUSTAKA
2.1 Dasar Teori
2.1.1 Mikrokontroler ESP32 dan Wi-Fi Transceiver
ESP32 adalah mikrokontroler berdaya rendah berkinerja tinggi buatan Espressif Systems yang dilengkapi dengan prosessor dual-core Tensilica Xtensa LX6 32-bit. ESP32 mendukung konektivitas nirkabel Wi-Fi 802.11 b/g/n (2.4 GHz) serta Bluetooth v4.2 BR/EDR dan BLE. Keunggulan utama ESP32 dalam aplikasi IoT adalah keberadaan stack TCP/IP internal yang memungkinkan perangkat melakukan komunikasi IP secara independen tanpa memerlukan komputer perantara. Dalam praktikum ini, ESP32 bertindak sebagai node edge yang membaca sensor, memproses logika lokal, dan mempublikasikan data ke awan.
2.1.2 Sensor Ultrasonik HC-SR04 dan Formula Jarak
Sensor HC-SR04 bekerja dengan memancarkan gelombang suara berfrekuensi tinggi (40 kHz) dari pin Transmitter (TRIG) dan menerima pantulannya pada pin Receiver (ECHO). Mikrokontroler memberikan pulsa logika HIGH selama 10 mikrodetik pada pin TRIG, kemudian mengukur durasi pulsa HIGH yang dihasilkan pin ECHO menggunakan fungsi pulseIn(). Konversi waktu tempuh gelombang menjadi jarak fisik dalam sentimeter (cm) dihitung menggunakan persamaan fisika:
Formula: distance = (duration * 0.0343) / 2.0
Konstanta 0.0343 cm/µs merepresentasikan kecepatan gelombang suara di udara, sedangkan pembagian 2 dilakukan karena durasi waktu mencakup perjalanan bolak-balik dari sensor ke objek dan kembali lagi.
2.1.3 Protokol MQTT dan Payload Telemetri JSON
MQTT (Message Queuing Telemetry Transport) adalah protokol komunikasi publish/subscribe yang sangat ringan (lightweight), dirancang khusus untuk perangkat berketerbatasan daya dan jaringan dengan bandwidth terbatas. Komunikasi terjadi melalui MQTT broker pada port standar 1883. Telemetri dikirimkan ke topik v1/devices/me/telemetry dengan muatan data berformat JSON (JavaScript Object Notation), yang berisi pasangan kunci-nilai (key-value pair) seperti distance (float) dan alarm (boolean).
2.1.4 Platform ThingsBoard Cloud dan Engine Rule Chain
ThingsBoard Cloud adalah platform IoT open-source yang menyediakan solusi lengkap untuk pengumpulan data, visualisasi telemetri, manajemen perangkat, dan pemrosesan otomatisasi. Fitur utama ThingsBoard adalah Rule Engine, yaitu mesin pemroses berbasis peristiwa yang memungkinkan pengguna menyusun alur kerja data (Rule Chain) menggunakan antarmuka grafis drag-and-drop. Rule Chain mengolah pesan masuk dari perangkat, mengevaluasi kondisi logika melalui skrip JavaScript, dan memicu tindakan balasan seperti penyimpanan database atau notifikasi.
2.1.5 Mekanisme Notifikasi Email via SMTP Protocol
Simple Mail Transfer Protocol (SMTP) adalah standar internet untuk transmisi surat elektronik. Dalam integrasi ThingsBoard, node Send Email memanfaatkan server SMTP eksternal (smtp.gmail.com pada port 587 dengan enkripsi TLS v1.2) dan otentikasi Google App Password (16 karakter) untuk mempublikasikan pesan email yang telah diformat oleh node To Email secara otomatis ke alamat penerima.
2.2 Komponen
Perangkat keras dan perangkat lunak yang digunakan dalam pembangunan sistem ini tercantum pada Tabel 2.1 berikut:
| No. | Komponen / Software | Spesifikasi / Parameter | Fungsi / Peran |
|---|---|---|---|
| 1 | ESP32 Board | 32-bit Dual Core, Wi-Fi 2.4 GHz | Mikrokontroler utama & penerbit telemetri MQTT |
| 2 | HC-SR04 | Ultrasonic Sensor (40 kHz) | Mengukur jarak objek fisik secara konstan |
| 3 | Buzzer Pasif | GPIO 14, Tegangan 3.3V-5V | Indikator alarm lokal saat jarak <= 15 cm |
| 4 | Kabel Jumper | Male-to-Female / Male-to-Male | Menghubungkan pin sensor/buzzer ke ESP32 |
| 5 | Breadboard | Standard 830 Point | Media perakitan sirkuit elektronik |
| 6 | Arduino IDE | Versi 2.x / Core ESP32 | Lingkungan pengembangan kode program C++ |
| 7 | PubSubClient & ArduinoJson | Library C++ Arduino | Komunikasi MQTT client dan penyusun payload JSON |
| 8 | ThingsBoard Cloud | eu.thingsboard.cloud (Port 1883) | Platform IoT penerima telemetri dan penyedia Rule Chain |
| 9 | Gmail SMTP Server | smtp.gmail.com:587 (TLS v1.2) | Server pengirim notifikasi email otomatis |
BAB III
PEMBAHASAN
3.1 Penjelasan simulasi
Sistem pemantauan jarak dan peringatan alarm email berbasis ESP32 ini dirancang melalui dua tahapan utama, yaitu pengkonfigurasian perangkat keras fisik serta penyusunan logika Rule Chain pada ThingsBoard Cloud.
3.1.1 Konfigurasi Wiring dan Skema Fisik Perangkat Keras
Perakitan perangkat keras menghubungkan sensor ultrasonik HC-SR04 dan buzzer ke mikrokontroler ESP32 dengan pemetaan pin sebagai berikut:
•Pin TRIG HC-SR04 terhubung ke GPIO 12 ESP32 (Output Pulsa Trigger).
•Pin ECHO HC-SR04 terhubung ke GPIO 13 ESP32 (Input Pulsa Pantulan).
•Pin Positif Buzzer terhubung ke GPIO 14 ESP32 (Output Alarm Lokal).
•Pin VCC terhubung ke 5V / 3.3V dan seluruh GND terhubung ke Ground bersama.
Sistem bekerja dengan membaca jarak setiap 2000 ms. Apabila jarak terdeteksi <= 15.0 cm, ESP32 mengaktifkan buzzer (HIGH) dan membungkus data JSON {"distance": 12.5, "alarm": true} untuk dipublikasikan ke topik v1/devices/me/telemetry.

3.1.2 Langkah-Langkah Pembuatan Rule Chain Alarm Email di ThingsBoard Cloud
Proses pengkonfigurasian otomasi pemicu notifikasi email pada platform ThingsBoard Cloud dilakukan secara sistematis melalui langkah-langkah berikut:
1.Membuat rule chain baru. Buka menu Rule chains, klik Add rule chain, lalu pilih Create new rule chain. Beri nama Alarm_Email_Ultrasonic.

2.Menambahkan node Message Type Switch. Cari "message type switch" di search bar, drag ke canvas, lalu hubungkan dari Input ke node ini.

3.Menambahkan node Save Timeseries. Cari "save timeseries", tambahkan ke canvas, lalu hubungkan dari message type switch ke node ini agar data sensor tersimpan dan dapat ditampilkan di dashboard.

4.Menambahkan dan mengatur node Switch. Cari "switch", tambahkan ke canvas dengan nama cekAlarm, lalu hubungkan dari save timeseries. Pilih mode JavaScript dan isi fungsi berikut, yang mengembalikan critical jika nilai alarm aktif (true, 1, atau "1") dan normal jika tidak.
if (msg.alarm == true || msg.alarm == 1 || msg.alarm == "1") {
return ['critical'];
}
return ['normal'];


5.Menambahkan dan mengatur node To Email. Cari "to email", tambahkan ke canvas dengan nama format email, lalu hubungkan dari cekAlarm melalui jalur critical.

Pengaturan node To Email:
•Email sender dan Recipients: isi From dengan alamat Gmail pengirim dan To dengan alamat penerima. Kolom Cc boleh dikosongkan.

•Message subject and content: isi Subject "PERHATIAN! Jarak Terlalu Dekat!", Mail body type "Plain text", dan Body seperti berikut.
Harap diperhatikan!
Device: ${deviceName} mendeteksi objek terlalu dekat!
Jarak saat ini: $[distance] cm.

6.Menambahkan dan mengatur node Send Email. Cari "send email", tambahkan ke canvas dengan nama kirimEmail, lalu hubungkan dari format email.

Matikan opsi Use system SMTP settings, lalu isi pengaturan berikut:
•Protocol: SMTP
•SMTP host: smtp.gmail.com
•SMTP port: 587
•Timeout ms: 10000
•Enable TLS: dicentang, dengan TLS version TLSv1.2
•Username: alamat Gmail pengirim
•Password: App Password Gmail (16 karakter), yang dibuat terlebih dahulu pada Akun Google

7.Menambahkan node Log. Cari "log", tambahkan ke canvas, lalu hubungkan dari send email untuk mencatat hasil pengiriman.

8.Menyimpan rule chain. Klik tombol centang di kanan bawah untuk menyimpan rule chain.

9.Membuka Device Profiles. Setelah rule chain tersimpan, buka menu Profiles → Device profiles, lalu klik baris profile "default".

10.Masuk ke mode edit. Klik tombol edit pada profile tersebut.

11.Mengganti Default rule chain. Cari opsi Default rule chain, lalu ubah pilihannya dari Root Rule Chain menjadi Alarm_Email_Ultrasonic (sesuaikan dengan nama rule chain yang telah dibuat).

12.Menyimpan konfigurasi profile. Klik tombol centang (Save) untuk menyimpan konfigurasi.

13.Mengirim data dari project IoT. Jalankan project IoT yang telah dibuat (ESP32 dengan sensor ultrasonik dan buzzer) agar mengirim data ke ThingsBoard. Saat objek terlalu dekat, perangkat mengirim nilai alarm yang aktif.

14.Mengecek email notifikasi. Buka inbox penerima dan pastikan email peringatan masuk.

3.2 Program
Berikut adalah source code C++ lengkap yang diunggah ke mikrokontroler ESP32 untuk membaca sensor HC-SR04, mengendalikan buzzer, terhubung ke Wi-Fi, serta mempublikasikan data telemetri JSON ke ThingsBoard Cloud via MQTT:
#include <PubSubClient.h>
#include <ArduinoJson.h>
// --- KONFIGURASI WIFI & THINGSBOARD ---
const char* WIFI_SSID = "KAMMARI";
const char* WIFI_PASS = "surabaya";
const char* TB_SERVER = "eu.thingsboard.cloud";
const int TB_PORT = 1883;
const char* TOKEN = "THINGSBOARD_ACCESS_TOKEN";
// --- KONFIGURASI PIN ---
#define TRIG_PIN 12
#define ECHO_PIN 13
#define BUZZER_PIN 14
// Jarak ambang batas untuk peringatan buzzer (dalam cm)
const float DISTANCE_THRESHOLD = 15.0;
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
void setupWiFi() {
delay(10);
Serial.println();
Serial.print("Menghubungkan ke WiFi: ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi Terhubung!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.println("\n=================[ DEBUG KONEKSI ]=================");
Serial.print("Menghubungkan ke IP Server: ");
Serial.print(TB_SERVER);
Serial.print(" pada Port: ");
Serial.println(TB_PORT);
// 1. DEBUG TAHAP 1: Tes Koneksi Jaringan Dasar (TCP Ping)
Serial.print("Tahap 1: Mengetuk pintu server (TCP Connect)... ");
if (espClient.connect(TB_SERVER, TB_PORT)) {
Serial.println("SUKSES!");
Serial.print("-> Hasil: ESP32 BISA melihat server dan Port ");
Serial.print(TB_PORT);
Serial.println(" terbuka.");
espClient.stop();
delay(500);
// 2. DEBUG TAHAP 2: Tes Otentikasi MQTT ThingsBoard
Serial.print("Tahap 2: Mencoba Login ke MQTT ThingsBoard... ");
if (client.connect("kelompok1", "kelompok1", "123456789")) {
Serial.println("TERHUBUNG TOTAL!");
Serial.println("===================================================\n");
} else {
Serial.print("GAGAL! rc = ");
Serial.println(client.state());
if (client.state() == -4) {
Serial.println("-> Analisis: Server menolak koneksi. Kemungkinan besar TOKEN / Username salah.");
} else if (client.state() == -2) {
Serial.println("-> Analisis: Koneksi mendadak putus saat proses handshake MQTT.");
} else if (client.state() == 5) {
Serial.println("-> Analisis: Username/Password salah atau tidak diizinkan oleh ThingsBoard.");
}
Serial.println("Mencoba lagi dalam 5 detik...");
Serial.println("===================================================\n");
delay(5000);
}
} else {
Serial.println("GAGAL TOTAL!");
Serial.println("-> Analisis Gagal di Tahap 1:");
Serial.print(" [A] IP '");
Serial.print(TB_SERVER);
Serial.println("' salah/berubah, ATAU");
Serial.println(" [B] Server ThingsBoard belum menyala/service MQTT mati, ATAU");
Serial.print(" [C] Firewall memblokir Port ");
Serial.print(TB_PORT);
Serial.println(".");
Serial.println("===================================================\n");
delay(5000);
}
}
}
float measureDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 30000); // Timeout 30ms
if (duration == 0) return -1.0;
float distanceCm = duration * 0.0343 / 2.0;
return distanceCm;
}
void setup() {
Serial.begin(115200);
while(!Serial) { ; }
Serial.println("\n--- Sistem Monitoring Jarak ESP32 Dimulai ---");
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(BUZZER_PIN, LOW);
setupWiFi();
client.setServer(TB_SERVER, TB_PORT);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
long now = millis();
if (now - lastMsg > 2000) {
lastMsg = now;
float distance = measureDistance();
Serial.println("----------------------------------------");
if (distance > 0) {
Serial.print("Jarak Terdeteksi: ");
Serial.print(distance);
Serial.println(" cm");
if (distance <= DISTANCE_THRESHOLD) {
digitalWrite(BUZZER_PIN, HIGH);
Serial.println("Status Alarm: AKTIF (Buzzer Menyala!)");
} else {
digitalWrite(BUZZER_PIN, LOW);
Serial.println("Status Alarm: AMAN");
}
StaticJsonDocument<200> doc;
doc["distance"] = distance;
doc["alarm"] = (distance <= DISTANCE_THRESHOLD);
char payload[200];
serializeJson(doc, payload);
Serial.print("Mengirim data JSON ke ThingsBoard: ");
Serial.println(payload);
if (client.publish("v1/devices/me/telemetry", payload)) {
Serial.println("Data Berhasil Dikirim!");
} else {
Serial.println("Data Gagal Dikirim ke MQTT Broker.");
}
} else {
Serial.println("Error: Sensor Ultrasonik di luar jangkauan atau tidak terbaca.");
}
}
}
BAB IV
PENUTUP
4.1 Kesimpulan
Berdasarkan hasil perancangan, implementasi, dan pengujian sistem pemantauan jarak berbasis ESP32 dan Rule Chain ThingsBoard Cloud, dapat ditarik beberapa kesimpulan utama sebagai berikut:
1.Integrasi mikrokontroler ESP32 dengan sensor ultrasonik HC-SR04 dan buzzer berhasil melakukan akuisisi jarak secara konstan dan mengaktifkan indikator alarm lokal saat jarak objek berada di bawah atau sama dengan ambang batas 15.0 cm.
2.ESP32 berhasil mentransmisikan data telemetri berformat JSON {"distance": value, "alarm": boolean} ke ThingsBoard Cloud pada topik v1/devices/me/telemetry melalui protokol MQTT secara stabil dengan interval 2 detik.
3.Konfigurasi Rule Chain Alarm_Email_Ultrasonic pada ThingsBoard Cloud yang terdiri dari node Message Type Switch, Save Timeseries, Switch (cekAlarm), To Email, Send Email, dan Log berhasil menyaring kondisi bahaya (critical path) secara otomatis.
4.Integrasi node Send Email dengan SMTP server Gmail (smtp.gmail.com:587) dan Google App Password terbukti sukses mengirimkan pesan email notifikasi peringatan real-time ke inbox penerima saat objek berada terlalu dekat.
4.2 Saran
Untuk pengembangan dan peningkatkan keandalan sistem ini di masa depan, disarankan beberapa poin berikut:
1.Mengimplementasikan teknik penyaringan sinyal digital seperti Moving Average Filter atau Median Filter pada pemrosesan sensor ultrasonik untuk meminimalkan fluktuasi noise atau pembacaan jarak spurius.
2.Memanfaatkan protokol enkripsi MQTT over TLS/SSL (port 8883) pada ESP32 untuk menjamin keamanan transmisi kredensial dan payload telemetri dari ancaman insersi data di jaringan publik.
3.Menambahkan fitur Clear Alarm pada Rule Chain untuk mengirimkan notifikasi email pemulihan saat jarak objek telah kembali aman (> 15.0 cm).
DAFTAR PUSTAKA
[1] Espressif Systems, "ESP32 Series Datasheet v4.1," Espressif Systems, Shanghai, 2023.
[2] ThingsBoard Authors, "ThingsBoard Documentation: Rule Engine Overview & Node Types," ThingsBoard Cloud, 2024. [Online]. Available: https://thingsboard.io/docs/user-guide/rule-engine-2-0/overview/.
[3] A. S. Tanenbaum and D. J. Wetherall, Computer Networks, 5th ed. Boston, MA: Pearson, 2011.
[4] R. Light, "Mosquitto: an open source MQTT broker," Journal of Open Source Software, vol. 2, no. 13, p. 265, 2017.
KESIMPULAN
Link Youtube: https://www.youtube.com/watch?v=4PAJkMCNJig
Tidak ada komentar:
Posting Komentar