Pendahuluan
Di Home Assistant (#21) dan ESPHome (#22) kamu sudah membangun smart home lewat integrasi native. Artikel ini melanjutkan Jalur C dengan pendekatan berbeda: Node-RED — editor flow berbasis node yang menghubungkan MQTT, logika, dan dashboard visual tanpa menulis backend Python/PHP.
Node-RED sangat cocok untuk prototipe cepat, integrasi antar layanan, dan dashboard custom di LAN — sambil tetap memakai broker Mosquitto pribadi (#16) dan topic MQTT yang sama dengan ESP32 dari proyek gabungan (#9).
Prasyarat: Paham MQTT dasar (#7), broker Mosquitto + auth (#16) sudah jalan, dan ESP32 mempublish DHT22 + subscribe relay (sketch #9 atau setara — wiring DHT22 (#5)). Opsional: sudah baca #21 / #22 untuk membandingkan stack smart home.
Yang Kamu Butuhkan
- PC / Raspberry Pi / VPS — bisa mesin yang sama dengan Mosquitto (#16)
- Node.js 18+ (jika install npm) atau Docker
- ESP32 yang publish ke topic Seri 1 (broker pribadi, bukan publik)
- Browser untuk editor Node-RED (
http://IP:1880)
Estimasi biaya: Node-RED gratis (open-source) — hardware sama proyek sebelumnya; bisa pakai Raspberry Pi yang sudah menjalankan Mosquitto.
Home Assistant vs ESPHome vs Node-RED
| Aspek | Home Assistant (#21) | ESPHome (#22) | Node-RED (artikel ini) |
|---|---|---|---|
| Fokus | Platform smart home lengkap | Firmware ESP32 dari YAML | Integrasi & flow visual |
| UI | Dashboard HA built-in | Entitas di HA | Dashboard Node-RED + flow canvas |
| Automasi | YAML / UI automasi HA | Via HA | Drag-and-drop node (if/switch/function) |
| MQTT | Subscriber/publisher | Native API (+ MQTT opsional) | Inti — mqtt in/out node |
| Kapan pakai | Smart home rumah tangga | Flash ESP32 cepat | Prototipe, glue antar API, dashboard custom |
Arsitektur: ESP32 → Mosquitto → Node-RED
| Komponen | Peran | Koneksi |
|---|---|---|
| ESP32 | Publisher sensor & subscriber relay | WiFi → Mosquitto :1883 |
| Mosquitto (#16) | Broker pusat | Topic Seri 1 + auth |
| Node-RED | Dashboard + otomasi visual | Subscribe/publish MQTT yang sama |
| Home Assistant (opsional) | Bisa jalan paralel | Subscriber MQTT terpisah — tidak bentrok |
Alur data secara singkat:
[ ESP32 — DHT22 + relay ]
|
| publish: kodingindonesia/esp32/dht22/data (JSON)
| subscribe: kodingindonesia/esp32/lampu/kontrol (ON/OFF)
v
[ Mosquitto @ Pi / VPS ] (#16)
|
| MQTT
v
[ Node-RED :1880 ]
|
+-- dashboard: gauge suhu & kelembaban
+-- tombol: NYALA / MATI lampu
+-- automasi: suhu > 30°C → publish OFF
Topic MQTT (konsisten Seri 1):
- Sensor:
kodingindonesia/esp32/dht22/data— JSON{"suhu":28.5,"kelembaban":65.2} - Relay:
kodingindonesia/esp32/lampu/kontrol—ON/OFF
Langkah 1 — Install Node-RED (Docker)
Cara termudah di server yang sudah punya Mosquitto:
# docker-compose.yml (tambahkan service di bawah Mosquitto)
services:
nodered:
image: nodered/node-red:latest
container_name: nodered
ports:
- "1880:1880"
volumes:
- nodered_data:/data
restart: unless-stopped
volumes:
nodered_data:
docker compose up -d nodered
# Buka http://192.168.1.50:1880
Docker + Mosquitto di mesin sama: Dari dalam container Node-RED, broker MQTT pakai IP LAN host (mis.
192.168.1.50) — bukanlocalhost/127.0.0.1, karena container punya network terpisah.
Install npm (alternatif):
npm install -g --unsafe-perm node-redlalunode-red— cocok di Raspberry Pi tanpa Docker.
Langkah 2 — Pasang Dashboard UI
- Node-RED → menu ☰ → Manage palette
- Tab Install → cari node-red-dashboard
- Install → tunggu selesai → Deploy
- Di palette kiri, buka grup dashboard (bukan dashboard 2.0)
- Drag ui_tab ke canvas → isi nama tab, misalnya
ESP32 Kindo - Drag ui_group → pilih tab tadi → nama group
Sensor DHT22 - Dashboard tersedia di
http://IP:1880/uisetelah node ui_* di-deploy
Langkah 3 — Konfigurasi Broker MQTT
- Drag node mqtt in ke canvas
- Klik ikon pensil pada node → Add new mqtt-broker
- Isi (sesuaikan #16):
- Server:
192.168.1.50(IP LAN host; jika Node-RED native di mesin yang sama dengan Mosquitto,127.0.0.1boleh) - Jika Mosquitto dan Node-RED dalam satu
docker-compose.yml, isi Server dengan nama service Mosquitto (mis.mosquitto) — Docker DNS internal mengenali hostname antar-container - Port:
1883 - Username:
kindo_esp32 - Password: isi lewat credential store Node-RED — jangan hardcode di flow yang di-export
- Server:
- Simpan broker — node mqtt in/out lain bisa pakai config yang sama
Broker publik: Jangan pakai
test.mosquitto.org— sama seperti peringatan di #16 dan #21.
Langkah 4 — Flow Sensor DHT22 (Dashboard)
Rangkai node berikut (kiri → kanan):
- mqtt in — topic
kodingindonesia/esp32/dht22/data, Output: auto-detect - json — parse payload string ke object
- function — ekstrak nilai:
(Duplikasi cabang dari output json — function kedua untuk kelembaban:msg.payload = msg.payload.suhu; return msg;
lalu sambungkan ke ui_text)msg.payload = msg.payload.kelembaban; return msg; - ui_gauge — pilih Group
Sensor DHT22yang sudah dibuat; set min 0, max 50 untuk suhu - ui_text — group yang sama; tampilkan angka kelembaban (%)
Pastikan setiap node ui_gauge / ui_text terhubung ke ui_group — kalau group kosong, widget tidak muncul di /ui.
Klik Deploy → buka /ui → gauge harus bergerak setiap ~10 detik (interval publish ESP32).
Langkah 5 — Kontrol Relay dari Dashboard
- Drag ui_group baru di tab yang sama → nama
Kontrol Lampu(group terpisah dariSensor DHT22) - Drag ui_button — pilih group
Kontrol Lampu; labelNYALA - Drag change — set
msg.payload=ON(string) - mqtt out — topic
kodingindonesia/esp32/lampu/kontrol; QoS 0 cukup - Sambungkan berurutan: output ui_button → input change → input mqtt out (satu jalur untuk tombol NYALA)
- Duplikasi ketiga node untuk tombol
MATIdengan payloadOFF— tetap di groupKontrol Lampu - Deploy → uji di
/ui— relay ESP32 harus klik (pastikan sketch #8 / #9 subscribe topic ini)
Pro tip: Beri nama node yang jelas (
DHT22 → Gauge Suhu) — flow kompleks cepat berantakan tanpa label.
Langkah 6 — Automasi Visual (Suhu > 30°C)
Tambahkan cabang paralel dari output json:
- function — cek threshold:
if (msg.payload.suhu > 30) { return { payload: "OFF", topic: "kodingindonesia/esp32/lampu/kontrol" }; } return null; - mqtt out — pilih broker yang sama dengan Langkah 3; kosongkan field Topic (Node-RED memakai
msg.topicdari function) atau pilih msg.topic dari dropdown di field Topic
Rule ini jalan setiap kali payload sensor masuk (~10 detik). Berbeda dengan automasi Home Assistant (#21) yang bisa pakai for: 5 minutes — kalau lampu sering berkedip, tambahkan node delay (mis. 5 menit, rate limit 1 msg) atau trigger hanya saat suhu naik melewati 30°C, bukan setiap pembacaan di atas threshold.
Ini setara automasi numeric_state di Home Assistant (#21), tapi sepenuhnya visual di canvas Node-RED.
Import Flow (Opsional)
Jika ingin mempercepat, salin JSON berikut → menu ☰ → Import → clipboard → Deploy. Sesuaikan broker MQTT setelah import:
[
{
"id": "tab_esp32",
"type": "tab",
"label": "ESP32 MQTT Kindo"
},
{
"id": "mqtt_broker_kindo",
"type": "mqtt-broker",
"name": "Mosquitto Kindo",
"broker": "192.168.1.50",
"port": "1883",
"clientid": "nodered-kindo",
"usetls": false,
"credentials": {
"user": "kindo_esp32",
"password": "GANTI_PASSWORD_MQTT_ANDA"
}
}
]
JSON di atas hanya contoh tab + broker — setelah import, double-click broker node dan isi password lewat credential Node-RED (jangan simpan password asli di artikel/repo publik). Lengkapi node mqtt in, json, ui_gauge, dan mqtt out mengikuti Langkah 4–6.
Uji Coba (Checklist)
- ESP32 online — verifikasi publish dari terminal:
mosquitto_sub -h 192.168.1.50 -p 1883 \ -u kindo_esp32 -P 'PASSWORD_ANDA' \ -t "kodingindonesia/esp32/dht22/data" -v - Node-RED
/uimenampilkan suhu & kelembaban - Tombol NYALA/MATI mengubah relay — atau uji tanpa dashboard:
mosquitto_pub -h 192.168.1.50 -p 1883 \ -u kindo_esp32 -P 'PASSWORD_ANDA' \ -t "kodingindonesia/esp32/lampu/kontrol" -m "ON" - Automasi: hangatkan sensor (>30°C) → lampu mati otomatis
- Restart container Node-RED — flow harus restore dari volume
/data
Gabung dengan Stack Seri 2
- Home Assistant (#21) + Node-RED bisa subscribe topic yang sama — HA untuk rumah, Node-RED untuk integrasi custom
- ESPHome (#22) untuk node baru; Node-RED untuk orkestrasi MQTT lintas perangkat
- Sensor BME280 (#13) — tambah mqtt in ke topic
kodingindonesia/esp32/bme280/data - Artikel #18 — simpan histori MQTT ke MySQL (flow Node-RED + function, atau subscriber Python)
Tips & Troubleshooting
- Dashboard kosong: Pastikan sudah Deploy; cek tab UI di
/ui; installnode-red-dashboard - mqtt in tidak terima data: Topic case-sensitive; cek auth broker; ESP32 harus ke broker pribadi (#16)
- JSON parse error: Pastikan node json setelah mqtt in; payload harus valid JSON dari #9
- Relay tidak merespons: Cek topic
lampu/kontrol; ESP32 perlumqttClient.loop()di sketch - Node-RED & Mosquitto di Docker: Gunakan IP host atau nama service compose, bukan
localhostdari dalam container lain - Port 1880 tidak bisa diakses: Buka firewall LAN; jangan expose ke internet tanpa auth
- WiFi 2.4 GHz: ESP32 tidak support jaringan 5 GHz saja
Keamanan & Produksi
- Aktifkan adminAuth di
settings.jsNode-RED — editor tanpa password berbahaya di LAN tamu - Jangan expose port
1880ke internet tanpa HTTPS + reverse proxy - Simpan kredensial MQTT di credential store Node-RED (bukan hardcode di flow export publik)
- Backup folder
/data(volume Docker) berisi flow — sama pentingnya dengan backup HA - Untuk MQTT over internet, gunakan TLS (#17) — bukan port 1883 plain
Langkah Selanjutnya (Seri 2)
- PIR + lampu MQTT (#24) — automasi gerak dengan debounce & hold time
- Artikel #17: MQTT TLS — amankan Mosquitto di internet
- Artikel #18: Python subscriber → MySQL untuk histori sensor
- Capstone greenhouse (#39) — gabung sensor, Node-RED/HA, dan aktuator
Node-RED melengkapi Jalur C: prototipe dashboard dan otomasi MQTT dalam hitungan menit. Lanjutkan di halaman artikel Koding Indonesia.