Minggu, 11 Oktober 2026

Prototipe Smart Street Lighting (Penerangan Jalan Pintar) Berbasis ESP32 dan Sensor Cahaya LDR

 

LAPORAN PRAKTIKUM

Prototipe Smart Street Lighting (Penerangan Jalan Pintar) Berbasis ESP32 dan Sensor Cahaya LDR

 


Disusun oleh:

Muhammad Naufal Zakcky Dzikrillah    24051204106

Mahdi Ghani Afriza                              24051204119

Muhammad Risqi Gemilang                  24051204181

Gerizt Geovany Saragih Sumbayak        24051204117

 

 

BAB I
PENDAHULUAN

1.1 Latar Belakang

Sistem penerangan jalan pintar (Smart Street Lighting) merupakan salah satu penerapan Internet of Things (IoT) untuk meningkatkan efisiensi energi dan otomatisasi infrastruktur publik. Lampu jalan yang menyala tanpa memperhatikan kondisi cahaya lingkungan memboroskan energi, sedangkan lampu yang gagal menyala pada saat gelap menurunkan keselamatan pengguna jalan. Pengendalian berbasis intensitas cahaya menjadi solusi sederhana untuk kedua masalah tersebut.

Pada praktikum ini, ESP32 digunakan sebagai mikrokontroler utama yang mengendalikan lampu jalan berdasarkan pembacaan intensitas cahaya dari sensor LDR. Selain mengendalikan lampu secara lokal, sistem dihubungkan ke platform IoT cloud siap pakai, yaitu ThingsBoard Cloud, menggunakan protokol MQTT. Data telemetri berupa intensitas cahaya dan status lampu dikirim secara berkala dari simulator Wokwi ke server cloud sehingga pemantauan dapat dilakukan terpusat melalui antarmuka web.

Pada tahap pertama praktikum, jalur komunikasi dari perangkat menuju cloud telah dibangun dan diverifikasi pada tab Latest telemetry. Tahap kedua, yang dilaporkan di sini, melengkapi sistem dengan tiga kemampuan. Pertama, dashboard untuk menampilkan telemetri secara visual. Kedua, rule chain untuk mengklasifikasikan kondisi gelap menjadi alarm bertingkat. Ketiga, notifikasi email ketika kondisi paling gelap terdeteksi. Kemampuan tersebut mengubah sistem dari sekadar pengirim data menjadi sistem pemantauan yang dapat memberi peringatan, sebagaimana dibutuhkan pada pengelolaan lampu jalan yang tersebar di banyak titik.

1.2 Rumusan Masalah

  1. Bagaimana mengonfigurasi perangkat pada ThingsBoard Cloud dan menghubungkan ESP32 menggunakan protokol MQTT dengan kredensial MQTT Basic?
  2. Bagaimana ESP32 membaca data analog dari sensor LDR dan mengendalikan status LED (lampu jalan) secara otomatis?
  3. Bagaimana merancang payload JSON dan mengirimkan data telemetri dari Wokwi ke ThingsBoard Cloud?
  4. Bagaimana memastikan data terverifikasi dan masuk secara real-time pada tab Latest telemetry ThingsBoard?
  5. Bagaimana menyajikan telemetri intensitas cahaya dan status lampu pada dashboard ThingsBoard?
  6. Bagaimana membuat rule chain yang mengklasifikasikan intensitas cahaya menjadi alarm bertingkat serta menampilkannya pada dashboard?
  7. Bagaimana mengirimkan notifikasi email ketika kondisi kritis terdeteksi, dan apa yang terjadi bila layanan email dibatasi?

1.3 Tujuan Praktikum

  1. Memahami prosedur pendaftaran perangkat dan pembuatan kredensial MQTT Basic pada ThingsBoard Cloud.
  2. Melakukan pengujian awal pengiriman telemetri MQTT berformat JSON dari PC menggunakan MQTTX ke server ThingsBoard.
  3. Merancang dan mensimulasikan rangkaian ESP32, LDR, dan LED pada Wokwi.
  4. Mengimplementasikan program C++ berbasis PubSubClient untuk mengontrol LED dan mengirimkan telemetri berkala.
  5. Memverifikasi pembaruan data secara real-time pada ThingsBoard Cloud.
  6. Membuat dashboard berisi widget intensitas cahaya, grafik riwayat, dan status lampu.
  7. Membuat rule chain dengan node switch (TBEL), create alarm, dan clear alarm untuk menghasilkan alarm bertingkat, lalu menampilkannya pada widget Alarms table.
  8. Mengonfigurasi notifikasi email melalui rule chain dan mendokumentasikan hasilnya secara jujur sesuai kondisi layanan.


 

BAB II

LANDASAN TEORI

2.1 ESP32

ESP32 adalah mikrokontroler produksi Espressif Systems yang dilengkapi Wi-Fi dan Bluetooth terintegrasi serta konverter analog-ke-digital (ADC) 12-bit dengan rentang nilai 0 sampai 4095. Pada praktikum ini GPIO 34 digunakan untuk membaca sinyal analog LDR dan GPIO 2 untuk mengendalikan LED. Pustaka WiFi.h dipakai untuk koneksi jaringan dan PubSubClient untuk komunikasi MQTT.

2.2 Sensor Cahaya LDR

LDR (Light Dependent Resistor) adalah komponen yang resistansinya berubah menurut intensitas cahaya. Pada modul LDR di Wokwi, kondisi gelap menghasilkan nilai ADC yang tinggi dan kondisi terang menghasilkan nilai rendah. Hal ini terlihat pada pengujian: 1 lux menghasilkan nilai sekitar 3906, sedangkan 1000 lux menghasilkan sekitar 1001. Pola tersebut adalah karakteristik modul sensor yang digunakan, bukan sifat umum semua rangkaian LDR. Ambang 2000 ditetapkan sebagai batas antara kondisi terang dan gelap.

2.3 LED (Light Emitting Diode)

LED bertindak sebagai aktuator visual yang mensimulasikan lampu penerangan jalan umum. LED terhubung ke Pin Digital 2 ESP32 dan dinyalakan (HIGH) ketika kondisi lingkungan terdeteksi gelap (nilai LDR > 2000).

2.4 Protokol MQTT

MQTT (Message Queuing Telemetry Transport) adalah protokol ringan berpola publish-subscribe dengan tiga komponen: publisher, subscriber, dan broker. Pesan dikelompokkan menurut topik. Pada ThingsBoard, topik baku untuk telemetri adalah v1/devices/me/telemetry. Kata me menunjuk perangkat yang sedang terhubung, sehingga identitas perangkat ditentukan oleh kredensial koneksi, bukan oleh isi topik. Payload berformat JSON, dan setiap key JSON menjadi satu key telemetri di platform.

2.5 Jenis Kredensial Perangkat pada ThingsBoard

ThingsBoard menyediakan tiga jenis kredensial yang saling menggantikan: Access Token (satu string rahasia), X.509 (sertifikat digital), dan MQTT Basic (kombinasi Client ID, username, dan password). Praktikum ini memakai MQTT Basic karena pustaka PubSubClient mendukung autentikasi tersebut secara langsung melalui client.connect(clientId, user, pass). Ketiga nilai harus cocok dengan yang terdaftar pada perangkat. Jika tidak, broker menolak koneksi dengan kode rc=5.

2.7 Wokwi dan MQTTX

Wokwi adalah simulator elektronika berbasis web yang menyediakan jaringan Wi-Fi virtual bernama Wokwi-GUEST tanpa kata sandi. Dari sudut pandang program, simulasi dan perangkat nyata bersifat identik. MQTTX adalah klien MQTT desktop open source dari EMQ yang digunakan sebagai alat uji untuk mempublikasikan pesan ke broker sebelum program perangkat ditulis.

2.8 Dashboard dan Widget ThingsBoard

Dashboard adalah halaman visual yang tersusun dari widget. Setiap widget memiliki datasource (entitas dan key telemetri) dan pengaturan tampilan. Pada praktikum ini digunakan widget gauge untuk nilai terkini, widget grafik untuk riwayat nilai, widget kartu nilai untuk status teks, dan widget Alarms table untuk daftar alarm.

2.9 Rule Chain dan Rule Engine

Rule engine memproses pesan yang masuk dari perangkat melalui rangkaian node yang disebut rule chain. Setiap node memiliki masukan dan keluaran, dan sambungan antarnode diberi label relasi. Node switch menjalankan skrip TBEL atau JavaScript dan mengembalikan nama jalur keluaran. Skrip pada praktikum ini mengembalikan critical, major, minor, atau normal. Pesan hanya mengalir pada sambungan yang labelnya sama persis dengan nama yang dikembalikan skrip.

2.10 Alarm

Alarm adalah catatan kondisi abnormal pada suatu entitas. Setiap alarm memiliki tipe dan tingkat keparahan (severity): Critical, Major, Minor, Warning, atau Indeterminate. Node create alarm membuat atau memperbarui alarm, sedangkan clear alarm menandai alarm aktif sebagai Cleared ketika kondisi kembali normal.

2.11 Notifikasi Email dan Batas Penggunaan

Node to email menyusun pesan email dari template, dan node send email mengirimkannya melalui server email sistem. Sintaks ${key} mengambil nilai dari metadata, sedangkan $[key] mengambil nilai dari isi pesan. ThingsBoard Cloud memberlakukan batas penggunaan bulanan per paket, termasuk jumlah email dan alarm. Dokumentasi resmi mencantumkan batas 100 email per bulan untuk paket Free atau Maker. Ketika batas diberlakukan, node send email dapat mengembalikan kegagalan walaupun pesan berhasil disusun.


 

BAB III

PERANCANGAN DAN HASIL PRAKTIKUM

3.1 Alat dan Bahan

Tabel 3.1 Alat dan bahan

Komponen

Jenis

Peran dalam sistem

Wokwi

Simulator berbasis web

Tempat rangkaian disusun, program ditulis, dan simulasi dijalankan

ESP32 DevKit

Mikrokontroler (simulasi)

Membaca LDR, mengendalikan LED, dan mengirim data melalui MQTT

Sensor LDR (modul AO)

Sensor (simulasi)

Membaca intensitas cahaya lingkungan

LED merah

Aktuator (simulasi)

Menyimulasikan lampu jalan

Resistor 220 Ω

Komponen pasif

Pembatas arus LED

Pustaka PubSubClient

Pustaka C++

Komunikasi MQTT

ThingsBoard Cloud

Platform IoT cloud

Menerima, menyimpan, menampilkan, dan memproses data

MQTTX 3.1.1

Klien MQTT desktop

Alat uji jalur komunikasi sebelum program ditulis

Peramban web dan akun Google

Antarmuka dan akun

Akses ke Wokwi dan ThingsBoard

MQTTX bukan bagian dari sistem akhir, melainkan alat diagnostik. Setelah ESP32 berjalan, MQTTX harus diputus agar tidak berebut Client ID dengan perangkat.

3.2 Rancangan Ambang Batas dan Tingkat Alarm

Ambang 2000 menentukan LED menyala atau mati. Untuk alarm, kondisi gelap dibagi menjadi tiga tingkat. Batas 3000 dan 3500 merupakan rancangan kelompok untuk keperluan pengujian, dan perlu dikalibrasi ulang pada penerapan nyata.

Tabel 3.2 Rancangan tingkat kondisi berdasarkan nilai ADC LDR

Tingkat (label rule chain)

Nilai ADC

Interpretasi

Severity alarm

normal

≤ 2000

Terang, lampu mati, tidak ada alarm

Alarm di-clear

minor

2001 sampai 3000

Mulai gelap, lampu menyala

Minor

major

3001 sampai 3500

Gelap

Major

critical

> 3500

Sangat gelap, perlu perhatian

Critical

3.3 Perancangan Rangkaian

Tabel 3.3 Hubungan komponen dengan ESP32

Pin komponen

Pin ESP32

Keterangan

LDR AO (Analog Output)

GPIO 34

Input analog tingkat cahaya

LDR VCC

3V3

Sumber daya sensor

LDR GND

GND

Ground

LED anoda (+)

GPIO 2 (melalui resistor 220 Ω)

Output digital pengendali lampu

LED katoda (−)

GND

Ground bersama

Gambar 3.1 Rangkaian prototipe Smart Street Lighting pada Wokwi

3.4 Langkah Kerja

Langkah kerja terbagi menjadi tiga kelompok: persiapan server dan pengujian jalur komunikasi (3.4.1 dan 3.4.2), pembangunan serta pengujian perangkat di Wokwi (3.4.3 sampai 3.4.6), dan pengembangan sisi platform berupa dashboard, rule chain, alarm, serta notifikasi email (3.4.7 sampai 3.4.13).

3.4.1 Membuat Perangkat dan Kredensial MQTT Basic

  1. Masuk ke ThingsBoard Cloud melalui https://thingsboard.cloud menggunakan akun Google. Pastikan peran di pojok kanan atas adalah Tenant administrator.
  2. Buka menu Entities, pilih Devices, lalu klik + Add device. Pada langkah Device details isi Name dengan Smart_Street_Light, biarkan Device profile bernilai default, lalu klik Next: Credentials. Jangan menekan Add pada tahap ini.
  3. Pada Credentials type pilih MQTT Basic, lalu isi kolom sesuai Tabel 3.4. Ketik nilainya secara manual dan jangan menekan ikon panah melingkar karena ikon tersebut membangkitkan nilai acak.
  4. Klik Add. Dialog Device created. Let’s check connectivity! muncul dengan State Inactive dan tabel Latest telemetry yang masih kosong, karena perangkat belum mengirim data. Klik Close.

Tabel 3.4 Kredensial MQTT Basic perangkat Smart_Street_Light

Kolom

Isian

Client ID

wokwi_kelompok_ssl

User Name

user_ssl

Password

pass_ssl123

Ketiga nilai ini digunakan kembali pada MQTTX dan pada program ESP32. Ketiganya harus sama persis, termasuk huruf besar dan kecil. Perbedaan satu karakter saja menyebabkan broker menolak koneksi dengan kode rc=5.





Gambar 3.2 Konfigurasi kredensial MQTT Basic pada ThingsBoard Cloud



 

Gambar 3.3 Perangkat berhasil didaftarkan (State Inactive)



3.4.2 Pengujian Jalur Komunikasi dengan MQTTX

Jalur komunikasi diuji dari PC terlebih dahulu sebelum program perangkat ditulis. Dengan cara ini, apabila simulasi Wokwi kelak gagal, penyebabnya dapat dipersempit ke program atau jaringan karena kredensial dan server sudah terbukti benar.

  1. Buka MQTTX, klik + New Connection, lalu isi sesuai Tabel 3.4. Host harus sesuai wilayah akun.
  2. Klik Connect. Koneksi berhasil bila nama koneksi berwarna hijau.
  3. Pada bagian bawah panel pesan, pilih format JSON dan QoS 0. Isi kolom Topic dengan v1/devices/me/telemetry, kemudian isi kotak payload dengan {"intensitas_cahaya": 3500, "status_lampu": "AKTIF"}. Pastikan tanda kutip berupa kutip lurus, bukan kutip melengkung hasil salin dari dokumen.
  4. Klik ikon kirim. Pesan muncul sebagai balon hijau bertuliskan Topic: v1/devices/me/telemetry.
  5. Di ThingsBoard, buka Devices, segarkan halaman, lalu buka Smart_Street_Light dan tab Latest telemetry. Key intensitas_cahaya bernilai 3500 dan status_lampu bernilai AKTIF harus muncul, dan State perangkat berubah menjadi Active.
  6. Setelah pengujian selesai, putuskan koneksi MQTTX dengan ikon daya merah agar tidak berebut Client ID dengan Wokwi.

Tabel 3.4 Konfigurasi koneksi MQTTX

Kolom

Isian

Name

Uji Smart Street Light

Client ID

wokwi_kelompok_ssl

Host

mqtt://mqtt.thingsboard.cloud

Port

1883

Username

user_ssl

Password

pass_ssl123

SSL/TLS

Nonaktif

MQTT Version

3.1.1





Gambar 3.4 Konfigurasi koneksi MQTTX ke broker ThingsBoard



Gambar 3.5 Pengiriman data uji dari MQTTX


 



Gambar 3.6 Data uji dari MQTTX tercatat pada Latest telemetry



3.4.3 Menyusun Rangkaian dan Pustaka di Wokwi

  1. Buka https://wokwi.com, masuk dengan akun Google, lalu buat proyek baru dengan papan ESP32 dan template Arduino.
  2. Klik tombol + pada panel Simulation. Tambahkan Photoresistor Sensor (modul LDR), LED merah, dan resistor 220 Ω.
  3. Sambungkan sesuai Tabel 3.3: VCC LDR ke 3V3, GND LDR ke GND, AO ke GPIO 34, anoda LED ke GPIO 2 melalui resistor 220 Ω, dan katoda LED ke GND. Hasil rangkaian ditunjukkan pada Gambar 3.1.
  4. Buka tab Library Manager, klik tombol +, cari PubSubClient, lalu pilih pustaka milik Nick O’Leary. Pustaka WiFi.h sudah tersedia bawaan pada platform ESP32.
  5. Tekan Ctrl+S dan pastikan tidak ada tanda titik pada nama tab, karena perubahan yang belum disimpan hilang bila halaman dimuat ulang.

Gambar 3.7 Pustaka PubSubClient pada Library Manager Wokwi

3.4.4 Menulis Program pada sketch.ino

Tempel Kode 3.1 pada tab sketch.ino. Tiga konstanta kredensial pada program harus sama dengan Tabel 3.4, dan  Pastikan program tersalin utuh sampai kurung kurawal penutup terakhir karena salinan yang terpotong menyebabkan kompilasi gagal.

Kode 3.1 Program ESP32

#include <WiFi.h>

#include <PubSubClient.h>

 

#define LDR_PIN 34

#define LED_PIN 2

 

const char* ssid = "Wokwi-GUEST";

const char* password = "";

 

// Konfigurasi ThingsBoard MQTT

const char* mqtt_server = "mqtt.thingsboard.cloud";

const char* mqtt_clid   = "wokwi_kelompok_ssl";

const char* mqtt_user   = "user_ssl";

const char* mqtt_pass   = "pass_ssl123";

const char* mqtt_topic  = "v1/devices/me/telemetry";

 

WiFiClient espClient;

PubSubClient client(espClient);

unsigned long lastMsg = 0;

 

void setup_wifi() {

  Serial.print("Connecting to WiFi");

  WiFi.mode(WIFI_STA);

  WiFi.begin(ssid, password, 6);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }

  Serial.println("\nWiFi connected");

}

 

void reconnect() {

  while (!client.connected()) {

    Serial.print("Attempting MQTT connection...");

    if (client.connect(mqtt_clid, mqtt_user, mqtt_pass)) {

      Serial.println("Thingsboard is Connected !!");

    } else {

      Serial.print("failed, rc=")

      Serial.print(client.state());

      Serial.println(" try again in 5 seconds");

      delay(5000);

    }

  }

}

 

void setup() {

  Serial.begin(115200);

  pinMode(LDR_PIN, INPUT);

  pinMode(LED_PIN, OUTPUT);

  setup_wifi();

  client.setServer(mqtt_server, 1883);

}

 

void loop() {

  if (!client.connected()) {

    reconnect();

  }

  client.loop();

 

  unsigned long now = millis();

  if (now - lastMsg > 3000) { // Kirim data tiap 3 detik

    lastMsg = now;

 

    int ldrValue = analogRead(LDR_PIN);

    String statusLampu = "MATI";

 

    // Jika kondisi gelap (nilai analog LDR > 2000), lampu menyala

    if (ldrValue > 2000) {

      digitalWrite(LED_PIN, HIGH);

      statusLampu = "AKTIF";

    } else {

      digitalWrite(LED_PIN, LOW);

      statusLampu = "MATI";

    }

 

    // Format payload JSON

    String payload = "{";

    payload += "\"intensitas_cahaya\":" + String(ldrValue) + ",";

    payload += "\"status_lampu\":\"" + statusLampu + "\"";

    payload += "}";

 

    client.publish(mqtt_topic, payload.c_str());

    Serial.print("Data Terkirim: ");

  Serial.println(payload);

  }

}

 

Tabel 3.6 Penjelasan bagian program

Bagian

Fungsi

#define LDR_PIN dan LED_PIN

Menetapkan GPIO 34 untuk LDR dan GPIO 2 untuk LED

Konfigurasi WiFi

SSID Wokwi-GUEST tanpa kata sandi, kanal 6 agar koneksi lebih cepat

Konfigurasi MQTT

Alamat broker, Client ID, username, password, dan topik telemetri

setup_wifi()

Menyambungkan ESP32 ke jaringan virtual dan menunggu hingga terhubung

reconnect()

Mencoba koneksi MQTT Basic; bila gagal mencetak kode rc dan mengulang tiap 5 detik

loop(): pewaktu

Mengirim data setiap 3000 milidetik dengan millis() tanpa menghentikan program

loop(): keputusan

Nilai ADC lebih dari 2000 menyalakan LED dan status AKTIF; selain itu LED mati dan status MATI

loop(): payload

Menyusun JSON dengan key intensitas_cahaya dan status_lampu, lalu mempublikasikannya

3.4.5 Menjalankan Simulasi dan Menguji Konektivitas

  1. Pastikan MQTTX sudah diputus.
  2. Klik tombol Play hijau pada panel Simulation dan tunggu proses persiapan.
  3. Amati Serial Monitor. Urutan yang diharapkan adalah Connecting to WiFi, WiFi connected, Attempting MQTT connection...Thingsboard is Connected !!, kemudian baris Data Terkirim yang berulang setiap 3 detik.
  4. Jika koneksi MQTT gagal, Serial Monitor menampilkan failed, rc= diikuti kode status. Nilai -2 menandakan server tidak terjangkau (host atau jaringan bermasalah), nilai 4 menandakan username atau password salah, dan nilai 5 menandakan klien tidak diizinkan karena kredensial tidak cocok dengan perangkat.

Gambar 3.8 Serial Monitor mengonfirmasi koneksi ke ThingsBoard dan pengiriman data berkala

3.4.6 Memverifikasi Telemetri Real-Time (Split Screen)

  1. Susun jendela berdampingan: ThingsBoard (tab Latest telemetry) di satu sisi dan Wokwi di sisi lain.
  2. Klik komponen LDR pada simulasi, lalu geser slider ILLUMINATION ke 1000 lux (terang). Nilai ADC sekitar 1001, LED mati, dan status_lampu bernilai MATI.
  3. Geser slider ke 1 lux (gelap). Nilai ADC sekitar 3906, LED menyala, dan status_lampu bernilai AKTIF.
  4. Pastikan Latest telemetry diperbarui mengikuti perubahan tersebut, dan catat nilai ADC aktual hasil percobaan.

Gambar 3.9 Pengujian real-time pada kondisi gelap

3.4.7 Membuat Dashboard Monitoring

Setelah telemetri terbukti masuk, data disajikan pada dashboard agar kondisi lampu jalan dapat dipantau tanpa membuka rincian perangkat. Biarkan simulasi Wokwi tetap berjalan agar key telemetri tersedia pada pilihan widget.

  1. Buka menu Dashboards, klik + Add dashboard, lalu pilih Create new dashboard. Isi Title dengan Smart_Street_Light_Dashboard dan klik Add. Buka dashboard tersebut, lalu klik ikon pensil untuk masuk ke mode edit.
  2. Widget intensitas cahaya (gauge). Klik Add widget, cari gauge, buka bundle Gauges (atau Analogue gauges), lalu pilih Radial gauge. Pilih Datasource berupa Device dan tentukan Smart_Street_Light, kemudian pilih key intensitas_cahaya. Pada pengaturan tampilan isi judul Intensitas Cahaya (ADC), nilai minimum 0, dan maksimum 4095 sesuai resolusi ADC 12-bit. Klik Add.
  3. Widget grafik riwayat. Klik Add widget. Widget Value card hanya menampilkan angka dan tidak memiliki opsi grafik, sehingga untuk riwayat nilai gunakan Value chart card atau widget Line chart pada bundle Charts. Pilih Device Smart_Street_Light dan key intensitas_cahaya, isi judul Grafik Intensitas Cahaya, lalu atur Time window ke Realtime dengan rentang beberapa menit. Klik Add Time series chart .
  4. Widget status lampu. Klik Add widget, pilih Value card pada bundle Cards. Pilih Device Smart_Street_Light dan key status_lampu, lalu isi label Status Lampu Jalan. Klik Add.
  5. Atur posisi dan ukuran widget, klik Save, lalu keluar dari mode edit. Geser slider LDR di Wokwi dan pastikan ketiga widget berubah mengikuti nilai sensor.


 

Tabel 3.7 Widget pada dashboard

Widget

Jenis

Key telemetri

Fungsi

Intensitas Cahaya (ADC)

Radial gauge

intensitas_cahaya

Menampilkan nilai terkini skala 0 sampai 4095

Grafik Intensitas Cahaya

Time series chart

intensitas_cahaya

Menampilkan riwayat perubahan nilai terhadap waktu

Status Lampu Jalan

Value card

status_lampu

Menampilkan AKTIF atau MATI

Alarms

Alarms table

(sumber: alarm perangkat)

Menampilkan alarm kondisi gelap (lihat 3.4.12)




Gambar 3.10 Formulir pembuatan dashboard




Gambar 3.11 Dashboard kosong dalam mode edit




Gambar 3.12 Pemilihan widget gauge dan datasource

Gambar 3.13 Pengaturan tampilan gauge intensitas cahaya

Gambar 3.14 Konfigurasi widget grafik riwayat intensitas cahaya

Gambar 3.15 Konfigurasi widget status lampu

Gambar 3.16 Tampilan dashboard monitoring

3.4.8 Membuat Rule Chain dan Menguji Klasifikasi Cahaya

  1. Buka menu Rule chains. Jika menu tidak terlihat pada sidebar, buka grup Advanced features atau Data processing, atau akses alamat https://thingsboard.cloud/ruleChains. Klik + Add rule chain, pilih Create new rule chain, isi Name dengan Smart_Street_Light_Alarm, lalu klik Add. Root Rule Chain yang sudah ada tidak dihapus.
  2. Buka Smart_Street_Light_Alarm dan masuk ke mode edit. Dari kategori Filter, tarik node switch ke kanvas, beri nama setAlarm, pilih bahasa TBEL, hapus skrip contoh, lalu masukkan Kode 3.2.
  3. Aktifkan debug sementara melalui tombol Disabled di samping Name, lalu pilih All messages. Tulisan Disabled menunjukkan status debug, bukan berarti node tidak berfungsi.
  4. Klik Test script function. Pilih Message type Post telemetry dan isi Message dengan {"intensitas_cahaya": 3906, "status_lampu": "AKTIF"}. Klik Test. Output yang diharapkan adalah ["critical"]. Ulangi dengan nilai 3200 (major), 2500 (minor), dan 1001 (normal).
  5. Klik Add untuk menempatkan node, lalu tarik sambungan dari titik kanan node Input ke titik kiri setAlarm. Sambungan dari Input tidak memerlukan label.

Kode 3.2 Skrip klasifikasi cahaya pada node setAlarm (TBEL)

if (msg.intensitas_cahaya > 3500) {
    return ['critical'];
} else if (msg.intensitas_cahaya > 3000) {
    return ['major'];
} else if (msg.intensitas_cahaya > 2000) {
    return ['minor'];
} else {
    return ['normal'];
}

Batas 2000, 3000, dan 3500 mengikuti Tabel 3.2. Skrip membaca msg.intensitas_cahaya, sehingga nama key harus sama dengan payload ESP32. Nilai 3906 yang diperoleh pada 1 lux berada di atas 3500 sehingga diklasifikasikan critical.

Gambar 3.17 Pembuatan rule chain Smart_Street_Light_Alarm


 

Gambar 3.18 Konfigurasi node switch setAlarm



Gambar 3.19 Hasil pengujian skrip menghasilkan jalur critical

3.4.9 Membentuk Alarm dan Membersihkan Kondisi Normal

Node alarm dikonfigurasi melalui formulir sehingga tidak memerlukan kode tambahan. Kolom Details script boleh dibiarkan pada nilai bawaan.

  1. Dari kategori Action, tarik tiga node create alarm dan satu node clear alarm. Beri nama dan isi sesuai Tabel 3.8. Gunakan Alarm type yang sama persis, yaitu Kondisi Gelap, pada keempat node, termasuk huruf besar dan spasi.
  2. Tarik sambungan dari setAlarm ke setiap node aksi. Pada dialog Add link, ketik label sesuai tabel. Jika tombol Add masih abu-abu, pastikan teks sudah berubah menjadi chip label (tekan Enter), lalu klik Add.
  3. Klik centang di pojok kanan bawah untuk menyimpan rule chain. Nonaktifkan debug setelah fungsi terverifikasi.

Tabel 3.8 Konfigurasi node dan label sambungan

Node (Name)

Jenis

Alarm type

Severity

Label dari setAlarm

critical

create alarm

Kondisi Gelap

Critical

critical

major

create alarm

Kondisi Gelap

Major

major

minor

create alarm

Kondisi Gelap

Minor

minor

clear

clear alarm

Kondisi Gelap

(tidak ada)

normal

Keempat node memakai tipe yang sama agar perubahan tingkat keparahan memperbarui alarm yang sama, dan agar clear alarm dapat menemukan alarm aktif untuk ditandai selesai. Label ditulis huruf kecil karena harus sama persis dengan nilai yang dikembalikan skrip. Jalur normal tidak membuat alarm baru, melainkan menandai alarm aktif sebagai Cleared sambil mempertahankan riwayatnya.

Gambar 3.20 Konfigurasi node create alarm

Gambar 3.21 Konfigurasi node clear alarm

Gambar 3.22 Kanvas rule chain Smart_Street_Light_Alarm

3.4.10 Menghubungkan Rule Chain ke Root Rule Chain

Rule chain yang baru dibuat belum menerima data hanya karena sudah ada. Telemetri harus diteruskan dari rule chain utama yang sudah berjalan.

  1. Buka Rule chains, lalu Root Rule Chain. Jangan menghapus atau mengubah node bawaan yang menerima dan menyimpan telemetri.
  2. Dari kategori Flow, tarik node rule chain ke kanvas. Beri nama ke alarm, lalu pilih Smart_Street_Light_Alarm pada kolom Rule chain.
  3. Hubungkan keluaran Message Type Switch ke node ke alarm dengan relasi Post telemetry. Klik Add, kemudian simpan Root Rule Chain dengan tombol centang.

Penyambungan dilakukan dari Root Rule Chain, bukan dengan mengganti Default rule chain pada Device profile. Penggantian pada profil akan memindahkan seluruh pesan ke rule chain baru dan dapat menghentikan penyimpanan telemetri yang dibutuhkan dashboard.

Gambar 3.23 Root Rule Chain dengan penghubung ke pemrosesan alarm

3.4.11 Menguji Pembentukan Alarm dari Perubahan Sensor

  1. Jalankan Wokwi dan tunggu sampai muncul WiFi connected serta Thingsboard is Connected !!. Pastikan MQTTX tidak sedang terhubung.
  2. Klik komponen LDR dan geser slider ke 1 lux. Serial Monitor mencetak intensitas_cahaya sekitar 3906 dengan status AKTIF.
  3. Buka tab Alarms pada perangkat Smart_Street_Light, atau menu Alarms. Alarm bertipe Kondisi Gelap dengan Severity Critical dan status Active Unacknowledged harus muncul.
  4. Untuk menguji tingkat lain, atur slider sehingga nilai ADC berada pada rentang 2001 sampai 3000 (minor) dan 3001 sampai 3500 (major).
  5. Geser slider ke 1000 lux. Nilai ADC kembali di bawah 2000, jalur normal berjalan, dan status alarm berubah menjadi Cleared.
  6. Bila alarm tidak muncul, aktifkan debug pada setAlarm, buka tab Events dengan Event type Debug, lalu telusuri apakah pesan masuk (IN) dan keluar (OUT) melalui label yang diharapkan.

Catatan: pengujian pada jendela Test script function hanya memeriksa skrip dan tidak membuat alarm, karena belum menjalankan seluruh jalur data dari perangkat.



Gambar 3.24 Alarm Critical terbentuk saat kondisi sangat gelap

3.4.12 Menampilkan Alarm pada Dashboard

  1. Buka Smart_Street_Light_Dashboard, masuk ke mode edit, lalu klik Add widget.
  2. Cari alarm, buka bundle Alarm widgets, dan pilih Alarms table.
  3. Pada Alarm source pilih Device dan tentukan Smart_Street_Light. Atur Time window ke Realtime dengan rentang yang mencakup waktu pengujian, misalnya last day atau last 30 days.
  4. Biarkan filter status, severity, dan tipe pada nilai bawaan agar alarm aktif maupun riwayat tidak tersembunyi. Pastikan kolom Created time, Originator, Type, Severity, dan Status tampil. Isi judul Alarms, lalu klik Add.
  5. Letakkan tabel di bawah widget sensor, klik Save, lalu uji kembali dengan slider LDR. Saat gelap alarm tampil sebagai Critical aktif, dan setelah kembali terang statusnya menjadi Cleared.

Dashboard kini menyatukan nilai terkini (gauge), riwayat nilai (grafik), status lampu (kartu nilai), dan kejadian abnormal (tabel alarm) dari perangkat yang sama dalam satu tampilan.

Gambar 3.25 Konfigurasi widget Alarms table

Gambar 3.27 Dashboard pada kondisi gelap dengan alarm Critical aktif

Gambar 3.26 Dashboard pada kondisi terang dengan alarm Cleared

3.4.13 Mengirim Alarm ke Email

Notifikasi email ditambahkan pada cabang critical sehingga pengguna menerima pesan ketika kondisi paling gelap terdeteksi. Cabang ini ditambahkan tanpa memutus sambungan critical menuju create alarm, karena satu keluaran switch dapat meneruskan pesan ke lebih dari satu node dengan label yang sama.

  1. Buka kembali Smart_Street_Light_Alarm dalam mode edit.
  2. Dari kategori Transform, tarik node to email dan beri nama critical. Isi To dengan alamat email tujuan. Isi Subject dengan PERHATIAN! ${deviceName} sangat gelap, Mail body type Plain text, dan Body sesuai Kode 3.3.
  3. Dari kategori External, tarik node send email dan beri nama critical. Aktifkan opsi Use system SMTP settings agar server email bawaan ThingsBoard digunakan.
  4. Tarik sambungan dari setAlarm ke to email dengan label critical, lalu dari to email ke send email dengan label Success. Simpan dengan tombol centang.
  5. Aktifkan debug All messages pada setAlarm, to email, dan send email, jalankan Wokwi pada 1 lux, kemudian periksa tab Events (Event type Debug) pada masing-masing node.

Kode 3.3 Template email pada node to email

Harap diperhatikan!
Device: ${deviceName} dalam kondisi sangat gelap.
Intensitas cahaya saat ini: $[intensitas_cahaya]
Status lampu: $[status_lampu]

Sintaks ${deviceName} mengambil nilai dari metadata, sedangkan $[intensitas_cahaya] dan $[status_lampu] mengambil nilai dari isi pesan telemetri.

Log pada tab Events menunjukkan bahwa node setAlarm meneruskan pesan melalui critical, major, dan normal sesuai nilai sensor. Node to email menerima pesan POST_TELEMETRY dan mengeluarkan pesan SEND_EMAIL dengan relasi Success, yang berarti template email berhasil disusun. Node send email menerima pesan SEND_EMAIL, tetapi keluarannya berrelasi Failure dengan kolom Error berisi pesan Email sending is disabled due to API limits!. Dengan demikian email tidak terkirim, dan kegagalan terjadi pada pengiriman oleh layanan ThingsBoard, bukan pada konfigurasi rule chain, label, maupun template.


 

 

Gambar 3.27 Konfigurasi node to email

Gambar 3.28 Konfigurasi node send email

Gambar 3.29 Kanvas rule chain dengan cabang notifikasi email

Gambar 3.30 email alarm dari thingsboard

3.6 Hasil Pengujian

Tabel 3.9 Skenario pencahayaan dan hasil observasi

Kondisi cahaya

Nilai ADC

Status LED

Payload telemetri

Alarm

Terang (1000 lux)

1001 (≤ 2000)

MATI

{"intensitas_cahaya":1001,"status_lampu":"MATI"}

normal (alarm Cleared)

Mulai gelap (2500 lux)

2500 (2001 - 3000)

AKTIF

{"intensitas_cahaya":2500,"status_lampu":"AKTIF"}

minor (alarm Active)

Gelap (3200 lux)

3200 (3001–3500)

AKTIF

{"intensitas_cahaya":3200,"status_lampu":"AKTIF"}

major (alarm Active)

Sangat gelap (1 lux)

3906 (> 3500)

AKTIF

{"intensitas_cahaya":3906,"status_lampu":"AKTIF"}

critical (alarm Active)

Tabel 3.10 Ringkasan hasil pengujian setiap bagian sistem

No

Pengujian

Hasil yang diharapkan

Hasil yang diperoleh

Status

1

Autentikasi MQTT Basic dari MQTTX

Koneksi diterima broker

Terhubung, indikator hijau (Gambar 3.3)

Berhasil

2

Publish data uji dari MQTTX

Telemetri 3500 dan AKTIF tersimpan

Tercatat pada Latest telemetry (Gambar 3.6)

Berhasil

3

Koneksi Wi-Fi dan MQTT ESP32

Pesan Thingsboard is Connected !! muncul

Tampil pada Serial Monitor (Gambar 3.8)

Berhasil

4

Pengiriman data berkala

Telemetri diperbarui tiap 3 detik

Log Data Terkirim berulang (Gambar 3.8)

Berhasil

5

Respons terhadap perubahan cahaya

LED dan telemetri mengikuti slider LDR

3906 AKTIF (Gambar 3.9)

Berhasil

6

Dashboard monitoring

Widget menampilkan telemetri perangkat

Gauge, grafik, dan status lampu tampil (Gambar 3.16)

Berhasil

7

Klasifikasi pada node switch

Nilai 3906 menghasilkan critical

Output ["critical"] (Gambar 3.24)

Berhasil

8

Pembentukan alarm

Alarm Critical terbentuk saat gelap

Alarm Kondisi Gelap Critical Active (Gambar 3.25)

Berhasil

9

Pembersihan alarm

Alarm menjadi Cleared saat terang

Status Cleared (Gambar 3.26)

Berhasil

10

Tabel alarm pada dashboard

Alarm tampil sesuai perangkat

Alarms table menampilkan alarm (Gambar 3.26)

Berhasil

11

Penyusunan pesan email

Pesan email terbentuk

to email mengeluarkan relasi Success (Gambar 3.29)

Berhasil

12

Pengiriman email

Email diterima alamat tujuan

Email berhasil terkirim dan diterima pada alamat tujuan (Gambar 3.30)

Berhasil

3.7 Analisis Hasil

Hasil pengujian menunjukkan bahwa komunikasi MQTT antara Wokwi dan ThingsBoard Cloud berjalan dan data terkirim sesuai interval 3 detik. Ketika nilai analog LDR melebihi 2000 (kondisi gelap), ESP32 menyalakan LED dan mengirimkan JSON dengan key intensitas_cahaya dan status_lampu. Data tersebut tercatat pada Latest telemetry dan tampil pada dashboard.

Rule chain mengklasifikasikan nilai ADC menjadi empat jalur sesuai Tabel 3.2. Nilai 2500 menghasilkan alarm Minor, 3200 menghasilkan Major, dan 3906 menghasilkan Critical. Ketika nilai kembali ke 1001, alarm berubah menjadi Cleared. Alarm type yang sama (Kondisi Gelap) pada semua node membuat perubahan tingkat memperbarui alarm yang sama, bukan membuat alarm baru.

Pada jalur critical, node to email menyusun pesan dan node send email mengirimkannya, sehingga email diterima pada alamat tujuan (Gambar 3.30). Keberhasilan alur ini bergantung pada konsistensi nama key, label sambungan, Alarm type, dan sambungan dari Root Rule Chain.

3.8 Keterbatasan dan Pengembangan

Simulasi saat ini baru mencakup aliran satu arah dari perangkat ke cloud, sehingga dashboard belum dapat mengendalikan lampu. Ambang 2000, 3000, dan 3500 merupakan rancangan untuk modul LDR di Wokwi dan perlu dikalibrasi pada kondisi cahaya nyata.

BAB IV

PENUTUP

4.1 Kesimpulan

  1. Integrasi ESP32 dan ThingsBoard Cloud menggunakan MQTT dengan autentikasi MQTT Basic berhasil dilakukan, dengan syarat host broker sesuai wilayah akun (mqtt.thingsboard.cloud) dan kredensial identik pada platform dan program.
  2. ESP32 membaca sensor LDR dan mengendalikan LED secara otomatis dengan ambang ADC 2000, dan mengirim telemetri JSON ke topik v1/devices/me/telemetry setiap 3 detik yang terverifikasi pada Latest telemetry.
  3. Pengujian berlapis menggunakan MQTTX sebelum pemrograman perangkat efektif mempersempit penelusuran kesalahan.
  4. Dashboard berisi gauge intensitas cahaya, grafik riwayat, dan status lampu berhasil dibuat dan mengikuti perubahan nilai sensor.
  5. Rule chain dengan node switch (TBEL), create alarm, dan clear alarm mengklasifikasikan kondisi gelap menjadi minor, major, dan critical, serta membersihkan alarm saat kondisi kembali terang. Alarm ditampilkan pada widget Alarms table di dashboard.
  6. Notifikasi email melalui node to email dan send email berhasil dikirim dan diterima pada alamat tujuan saat kondisi critical (Gambar 3.30).
  7. Penempatan logika keputusan di sisi server memungkinkan perubahan ambang tanpa memprogram ulang perangkat.

4.2 Saran

  1. Gunakan host broker yang sesuai wilayah akun ThingsBoard sejak awal dan salin kredensial langsung dari Manage credentials agar tidak terjadi rc=5.
  2. Jalankan hanya satu klien MQTT untuk setiap Client ID. Putuskan MQTTX sebelum menjalankan Wokwi.
  3. Batasi frekuensi notifikasi dengan cooldown atau pemicu hanya saat alarm baru terbentuk (relasi Created pada create alarm) agar kuota email tidak cepat habis.
  4. Siapkan saluran notifikasi cadangan, misalnya webhook atau aplikasi pesan, serta pantau halaman Plan and billing untuk kuota email.
  5. Kalibrasi ambang LDR berdasarkan kondisi cahaya nyata sebelum penerapan pada lampu jalan sebenarnya.
  6. Tambahkan kontrol manual (override) dari dashboard melalui RPC ThingsBoard untuk kendali dua arah.
  7. Simpan dokumentasi berupa tangkapan layar setiap tahap sebagai cadangan bila demonstrasi langsung terkendala jaringan.

4.3 Link Proyek Wokwi

https://wokwi.com/projects/477497836162956289


DAFTAR PUSTAKA

[1] ThingsBoard, Inc. “ThingsBoard MQTT Device API Reference.” Tersedia di https://thingsboard.io/docs/. Diakses pada 18 Oktober 2026.

[2] ThingsBoard, Inc. “Rule Engine, Alarms, and Dashboards Documentation.” Tersedia di https://thingsboard.io/docs/. Diakses pada 18 Oktober 2026.

[3] ThingsBoard, Inc. “ThingsBoard Cloud Subscription Plans.” Tersedia di https://thingsboard.io/docs/paas/eu/reference/subscriptions/. Diakses pada 18 Oktober 2026.

[4] Espressif Systems. “ESP32 Analog to Digital Converter (ADC) API.” Dokumentasi ESP-IDF.

[5] Wokwi. “wokwi-photoresistor-sensor Reference.” Tersedia di https://docs.wokwi.com/. Diakses pada 18 Oktober 2026.

[6] O’Leary, N. “PubSubClient: Arduino Client for MQTT.” Tersedia di https://github.com/knolleary/pubsubclient.

[7] EMQ Technologies. “MQTTX: Your All-in-one MQTT Client Toolbox.” Tersedia di https://mqttx.app/.

[8] Modul 5 Praktikum Internet of Things. “Mencoba Platform IoT Cloud Siap Pakai dengan Wokwi.” Program Studi Informatika.

Tidak ada komentar:

Posting Komentar