1. Apa itu Node-RED?
Node-RED adalah alat visual programming open-source yang dibangun di atas Node.js. Dirilis oleh IBM Research pada tahun 2014, Node-RED dirancang khusus untuk menyambungkan perangkat keras, layanan web, dan API dalam alur kerja berbasis antarmuka drag-and-drop. Node-RED menjadi salah satu alat paling populer dalam ekosistem IoT karena kemudahannya dalam mengotomasi alur data antar perangkat.
Konsep dasar Node-RED sangat sederhana: Anda menggambar alur kerja dengan menghubungkan node (blok fungsional) di canvas visual menggunakan kabel. Setiap node mewakili satu fungsi β mulai dari membaca sensor, memproses data, mengirim pesan MQTT, hingga menampilkan data di dashboard. Tidak perlu menulis kode dalam bahasa pemrograman tradisional untuk membuat automasi IoT yang kompleks.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β ALUR KERJA NODE-RED β β β β βββββββββββ ββββββββββββ βββββββββββ β β β INJECT ββββββΆβ FUNCTION ββββββΆβ MQTT β β β β (Timer) β β (Proses) β β(Publish)β β β βββββββββββ ββββββββββββ βββββββββββ β β β β βββββββββββ ββββββββββββ βββββββββββ β β β MQTT ββββββΆβ CHANGE ββββββΆβ UI β β β β(Subscribe)β β(Ubah Data)β β(Dashboard)β β β βββββββββββ ββββββββββββ βββββββββββ β β β β Flow = Serangkaian node yang terhubung β β Node = Blok fungsi individual β β Wire = Koneksi antar node (transfer data) β β Message (msg) = Objek yang mengalir melalui kabel β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Use Cases Node-RED dalam IoT
| Use Case | Deskripsi | Contoh Penerapan |
|---|---|---|
| Otomasi Rumah | Kontrol lampu, AC, pintu otomatis berdasarkan sensor | Lampu menyala otomatis saat gelap |
| Monitoring & Logging | Mengumpulkan data sensor dan menyimpan ke database | Log suhu dan kelembaban ke InfluxDB |
| Gateway IoT | Bridge antara protocol berbeda (MQTT, HTTP, CoAP) | Konversi data Modbus ke MQTT |
| Dashboard Real-time | Visualisasi data sensor secara real-time di browser | Dashboard suhu ruangan |
| Alert & Notifikasi | Kirim notifikasi jika kondisi tertentu terpenuhi | Alert jika suhu melebihi 40Β°C |
| Integrasi Layanan | Hubungkan IoT dengan layanan cloud | Kirim data ke Google Sheets |
Node-RED memungkinkan engineer dan maker untuk membuat alur kerja kompleks dalam hitungan menit, bukan jam. Komunitasnya menyediakan ribuan node siap pakai di npm, sehingga hampir semua kebutuhan integrasi sudah tersedia. Sangat cocok untuk prototyping cepat dan juga deployment produksi pada perangkat seperti Raspberry Pi.
2. Instalasi Node-RED
Node-RED dapat dijalankan di berbagai platform: Windows, macOS, Linux, dan juga langsung di board Raspberry Pi. Yang Anda butuhkan adalah Node.js versi 18 atau lebih baru yang sudah terinstal di sistem Anda.
Metode 1: Instalasi via npm (Semua Platform)
Ini adalah cara paling universal untuk menginstal Node-RED. Berlaku untuk Windows, macOS, dan Linux.
Langkah 1: Instal Node.js
# Pastikan Node.js sudah terinstal node --version # Output harus v18 atau lebih tinggi # Contoh: v20.11.1
Langkah 2: Instal Node-RED secara global
# Instal Node-RED secara global sudo npm install -g --unsafe-perm node-red # Jalankan Node-RED node-red # Buka browser ke: # http://localhost:1880
Setelah menjalankan perintah node-red, Anda akan melihat log di terminal yang menunjukkan Node-RED berhasil berjalan. Buka browser dan akses http://localhost:1880 untuk membuka editor Node-RED.
Metode 2: Instalasi via Docker
Gunakan Docker jika ingin mengisolasi instalasi atau menjalankan Node-RED di container yang portabel.
# Jalankan dengan Docker
docker run -it -p 1880:1880 --name mynodered \
-v nodered_data:/data \
nodered/nodered
# Atau dengan Docker Compose:
# nodered/docker-compose.yml
services:
nodered:
image: nodered/nodered
ports:
- "1880:1880"
volumes:
- nodered_data:/data
volumes:
nodered_data:
Node-RED menggunakan port 1880 secara default. Anda dapat mengubahnya di file settings.js pada baris uiPort: process.env.PORT || 1880. Untuk keamanan di jaringan publik, pastikan untuk menambahkan autentikasi pada Node-RED.
Metode 3: Instalasi di Raspberry Pi
Jika Anda menggunakan Raspberry Pi, ada cara khusus yang sangat mudah. Raspberry Pi OS (Raspbian) sudah memiliki Node-RED terinstal secara default di versi Raspbian yang diunduh dari website resmi. Jika belum terinstal, jalankan perintah berikut:
# Unduh dan jalankan script instalasi resmi bash <(curl -sL https://raw.githubusercontent.com/\ node-red/linux-install/master/deb/update-node-red-pi) # Jalankan Node-RED node-red-start # Agar Node-RED otomatis start saat boot: sudo systemctl enable nodered.service sudo systemctl start nodered.service
Gunakan kartu microSD minimal 16 GB dengan kelas A2 untuk performa terbaik. Jika menggunakan Raspberry Pi 4 atau 5, Node-RED akan berjalan sangat responsif. Untuk versi Pi Zero, gunakan versi Lite OS dan pastikan RAM tidak habis oleh GUI.
3. Interface Node-RED
Saat pertama kali membuka Node-RED di browser, Anda akan disambut oleh editor visual yang intuitif. Interface Node-RED terdiri dari beberapa area utama yang masing-masing memiliki fungsi khusus.
Layout Editor
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β π Node-RED Editor [Deploy βΌ] β ββββββββββββββ¬ββββββββββββββββββββββββββββββ¬ββββββββββββββββββββ€ β β β β β PALETTE β CANVAS (Workspace) β DEBUG / INFO β β β β β β [inject] β βββββββ βββββββ βββββββ β msg.payload: β β [debug] β β INJ ββββFUNC ββββDEBUGβ β "Hello World" β β [function] β βββββββ βββββββ βββββββ β β β [change] β β [Tab: debug] β β [mqtt in] β Flow 1: Sensor Monitoring β [Tab: info] β β [mqtt out] β β [Tab: help] β β [http in] β β [Tab: config] β β [ui text] β β β β [ui gauge] β β β β [ui chart] β β β β ... β β β ββββββββββββββ΄ββββββββββββββββββββββββββββββ΄ββββββββββββββββββββ€ β [Flows] [Global Config] [Import] [Export] β 3 tabs aktif β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Palette (Panel Kiri)
Palette adalah daftar semua node yang tersedia untuk digunakan. Node-node ini dikelompokkan berdasarkan kategori seperti input, output, function, social, dan storage. Anda dapat mencari node tertentu dengan mengklik area pencarian di bagian atas palette. Untuk menambah node baru, buka menu β‘ β Manage Palette.
Canvas / Workspace (Area Tengah)
Canvas adalah area kerja utama tempat Anda menaruh node dan menghubungkannya dengan kabel. Anda bisa melakukan zoom in/out dengan scroll wheel, dan pan (geser) dengan klik kanan + drag. Workspace bisa memilikiε€δΈͺ tab/flow untuk mengorganisasi alur kerja yang berbeda.
Panel Kanan
Panel sebelah kanan memiliki beberapa tab penting:
- Debug β Menampilkan output dari node debug. Sangat berguna untuk troubleshooting.
- Info β Menampilkan informasi tentang node yang dipilih.
- Help β Dokumentasi singkat tentang node yang dipilih.
- Config nodes β Menampilkan konfigurasi global seperti MQTT broker, HTTP endpoints, dll.
Manajemen Flow (Tab)
Node-RED mendukung multi-tab flow, memungkinkan Anda mengorganisasi proyek menjadi beberapa halaman terpisah. Klik tab "+" di bagian bawah canvas untuk membuat flow baru. Setiap flow memiliki nama yang bisa diubah dengan klik kanan pada tab.
Buat flow terpisah untuk setiap fungsi: flow untuk sensor, flow untuk actuator, flow untuk dashboard, dan flow untuk integrasi API. Gunakan node link in / link out untuk menghubungkan antar flow tanpa kabel langsung.
Menu Utama
| Menu | Fungsi | Keyboard Shortcut |
|---|---|---|
| Import | Impor flow dari clipboard atau file JSON | Ctrl + I |
| Export | Ekspor flow ke clipboard atau file | Ctrl + E |
| Deploy | Terapkan perubahan ke runtime | Ctrl + D |
| Manage Palette | Install/hapus node dari palette | β |
| Settings | Pengaturan editor dan runtime | β |
| Search Flows | Cari node di semua flow | Ctrl + F |
4. Node Dasar: Inject, Debug, Function, Change
Sebelum melangkah ke integrasi IoT yang kompleks, penting untuk memahami empat node dasar yang paling sering digunakan dalam Node-RED: inject, debug, function, dan change.
Node Inject
Node inject adalah titik awal alur kerja. Node ini mengirim pesan (message) ke node berikutnya. Anda bisa mengatur kapan pesan dikirim: secara manual (klik tombol di node), secara berkala (interval waktu), atau sekali saat flow di-deploy.
[
{
"id": "node-inject-1",
"type": "inject",
"name": "Kirim Data",
"props": [
{ "p": "payload", "v": "Hello Node-RED!", "vt": "str" },
{ "p": "topic", "v": "test/topic", "vt": "str" }
],
"payload": "Hello Node-RED!",
"payloadType": "str",
"topic": "test/topic",
"once": false,
"repeat": "",
"wires": [ [ "node-debug-1" ] ]
}
]
Pengaturan penting pada node inject:
- Payload β Data yang akan dikirim (string, number, JSON, buffer, atau timestamp)
- Topic β Topik pesan, sering digunakan sebagai routing identifier
- Repeat β Interval pengiriman otomatis: interval (detik), cron+interval, atau none (sekali klik)
- Once β Jika dicentang, pesan hanya dikirim sekali saat flow di-deploy
Node Debug
Node debug adalah alat utama untuk melihat data yang mengalir melalui flow. Output debug ditampilkan di panel sebelah kanan. Node ini sangat penting saat troubleshooting atau mengembangkan flow baru.
Node Function
Node function adalah tempat Anda menulis kode JavaScript kustom untuk memproses data. Setiap pesan yang masuk tersedia sebagai variabel msg dan pesan keluar harus dikirim menggunakan return msg atau node.send(msg).
// Contoh: Konversi Celsius ke Fahrenheit
// Tarik ke dalam node Function
var suhuCelsius = msg.payload.suhu;
var suhuFahrenheit = (suhuCelsius * 9/5) + 32;
// Tambahkan data baru ke message
msg.payload = {
celsius: suhuCelsius,
fahrenheit: Math.round(suhuFahrenheit * 100) / 100,
timestamp: new Date().toISOString()
};
// Kirim ke output pertama
return msg;
Pastikan setiap msg yang masuk memiliki data yang valid sebelum diproses. Gunakan pengecekan seperti if (typeof msg.payload === 'object' && msg.payload.suhu !== undefined) untuk menghindari error saat data tidak sesuai format yang diharapkan.
Node Change
Node change adalah cara tanpa kode (codeless) untuk memodifikasi pesan. Node ini bisa mengatur (set), menghapus (delete), atau mengganti (change/replace) bagian dari objek msg menggunakan aturan berbasis tindakan.
| Tindakan | Fungsi | Contoh |
|---|---|---|
| Set | Mengatur nilai baru pada path tertentu | Set msg.payload.status = "online" |
| Change | Mencari dan mengganti string | Ganti "celsius" dengan "Β°C" |
| Delete | Menghapus properti dari msg | Delete msg.payload.debug |
5. Integrasi MQTT
MQTT (Message Queuing Telemetry Transport) adalah protokol messaging ringan yang menjadi standar de facto komunikasi IoT. Node-RED menyediakan dua node utama untuk MQTT: mqtt in untuk subscribe (menerima data) dan mqtt out untuk publish (mengirim data). Untuk menggunakan MQTT di Node-RED, Anda perlu menginstal node tambahan melalui Manage Palette.
Instalasi Node MQTT
# Akses direktori instalasi Node-RED cd ~/.node-red # Instal node MQTT npm install node-red-contrib-mqtt-broker # Atau melalui browser: # Menu β‘ β Manage Palette β Install # Cari: node-red-contrib-mqtt-broker # Klik Install
Konfigurasi MQTT Broker
Sebelum menggunakan node MQTT, Anda perlu menambahkan konfigurasi broker MQTT. Bisa menggunakan broker publik seperti broker.hivemq.com atau broker sendiri seperti Mosquitto.
// MQTT Config Node (ditambahkan otomatis saat
// mengkonfigurasi mqtt in / mqtt out)
{
"id": "mqtt-broker-1",
"type": "mqtt-broker",
"name": "Broker Lokal",
"broker": "localhost",
"port": "1883",
"clientid": "nodered-client",
"autoConnect": true,
"usetls": false,
"protocolVersion": "MQTTv5",
"keepalive": "60",
"cleansession": true
}
Subscribe: Menerima Data MQTT
Node mqtt in mendengarkan topik tertentu dari broker. Saat ada pesan baru di topik tersebut, pesan akan diteruskan ke node berikutnya.
// Flow: Subscribe MQTT dan tampilkan di debug
//
// mqtt-in βββΆ debug
//
// Konfigurasi mqtt-in:
// Topic: sensor/ruang-tamu/suhu
// QoS: 0
// Output: auto-detect
// Payload yang diterima akan muncul di panel debug
// Contoh: { "suhu": 28.5, "kelembaban": 65 }
Publish: Mengirim Data MQTT
Node mqtt out mengirim pesan ke topik tertentu pada broker. Data dikirim sebagai payload dari message yang masuk.
// Flow: Timer kirim data ke MQTT setiap 5 detik
//
// inject(5s) βββΆ function βββΆ mqtt-out
//
// Konfigurasi inject:
// Repeat: interval 5 detik
//
// Konfigurasi function:
// msg.payload = JSON.stringify({
// suhu: (20 + Math.random() * 15).toFixed(1),
// kelembaban: (40 + Math.random() * 40).toFixed(1),
// timestamp: new Date().toISOString()
// });
// msg.topic = "sensor/ruang-tamu/suhu";
// return msg;
//
// Konfigurasi mqtt-out:
// Topic: sensor/ruang-tamu/suhu
// QoS: 0
// Retain: true
Topik MQTT untuk IoT
Struktur Topik MQTT yang Direkomendasikan:
==========================================
{kelompok}/{device_id}/{jenis_data}
Contoh:
sensor/ruang-tamu/suhu β {"suhu": 28.5}
sensor/ruang-tamu/kelembaban β {"kelembaban": 65}
sensor/dapur/asap β {"asap": 850}
actuator/lampu/ruang-tamu β {"status": "on"}
actuator/kipas/dapur β {"speed": 3}
status/device/esp32-001 β {"online": true}
alert/suhu-tinggi β {"pesan": "Suhu 40Β°C!"}
Tipe Topik:
sensor/... β Perangkat Kirim (Publish) β Perangkat ke Server
actuator/... β Perangkat Terima (Subscribe) β Server ke Perangkat
status/... β Monitoring kesehatan perangkat
alert/... β Notifikasi kondisi darurat
QoS 0: Fire and forget β pesan dikirim sekali tanpa konfirmasi. Tercepat, tapi bisa hilang. QoS 1: Pesan dikirim dan dikonfirmasi sekali. Bisa duplikat. QoS 2: Pesan dikirim dan dikonfirmasi empat kali. Paling handal, tapi paling lambat. Untuk data sensor real-time, QoS 0 atau 1 sudah cukup.
6. Membuat Dashboard
Node-RED menyediakan package node-red-dashboard yang memungkinkan Anda membuat antarmuka visual (dashboard) langsung dari editor. Dashboard ini bisa diakses melalui browser di perangkat apa saja β laptop, tablet, atau smartphone β sehingga sangat cocok untuk monitoring IoT real-time.
Instalasi Dashboard
# Instal dashboard cd ~/.node-red npm install node-red-dashboard # Restart Node-RED node-red-stop && node-red-start # Akses dashboard di: # http://localhost:1880/ui
Konsep: ui_tab, ui_group, ui_site
Dashboard Node-RED menggunakan struktur hierarki:
Hierarki Dashboard:
====================
Site (Situs)
βββ Tab (Halaman)
βββ Group (Kelompok)
βββ Widget (Komponen Visual)
Contoh:
π IoT Dashboard (Site)
βββ π Monitoring (Tab 1)
β βββ π‘οΈ Sensor Suhu (Group)
β β βββ Gauge Suhu β [ui_gauge]
β β βββ Chart Suhu β [ui_chart]
β β βββ Text Status β [ui_text]
β βββ π‘ Status Lampu (Group)
β βββ Toggle Lampu β [ui_switch]
β βββ Gauge Kecerahan β [ui_gauge]
βββ βοΈ Pengaturan (Tab 2)
β βββ β° Timer Auto β [ui_timepicker]
β βββ π Threshold Suhu β [ui_slider]
βββ π Log Aktivitas (Tab 3)
βββ Tabel Event β [ui_table]
Widget Dashboard
| Widget | Fungsi | Data Type |
|---|---|---|
ui_gauge | Menampilkan angka dengan indikator visual (lingkaran/arah) | Number |
ui_chart | Chart data time-series (bar, line, pie) | Array / Number |
ui_text | Menampilkan teks atau angka sederhana | String / Number |
ui_switch | Toggle on/off (untuk kontrol aktuator) | Boolean |
ui_slider | Slider untuk mengatur nilai (0-100) | Number |
ui_dropdown | Dropdown pilihan | String |
ui_table | Tabel data | Array of objects |
ui_button | Tombol aksi | Trigger |
ui_colour_picker | Pemilih warna (untuk LED RGB) | Hex color |
Contoh Flow Dashboard
// Flow Dashboard Monitoring Suhu // // Struktur: // mqtt-in βββΆ function βββΆ ui_gauge (Suhu) // βββΆ ui_chart (Histori) // βββΆ ui_text (Status) // // ui_gauge config: // Group: Sensor Suhu (tab: Monitoring) // Label: "Suhu Ruangan" // Unit: "Β°C" // Min: 0, Max: 50 // Colours: "#00b500, #e6e600, #ca3838" // // ui_chart config: // Group: Sensor Suhu (tab: Monitoring) // Label: "Histori Suhu" // Chart Type: line // X-Axis: 10 minutes // Y-Axis: 0 - 50 // // function config: // msg.payload = msg.payload.suhu; // return msg;
Untuk performa terbaik, batasi jumlah data di chart (misal 10-20 data point terakhir). Gunakan ui_template untuk widget kustom yang tidak tersedia di palette standar. Dashboard juga mendukung tema gelap β aktifkan di Configuration Node ui_base pada tab Settings.
7. HTTP In/Out untuk REST API
Node-RED dapat berfungsi sebagai server REST API yang menerima dan merespons permintaan HTTP. Dengan node http in dan http response, Anda bisa membuat endpoint API untuk menerima data dari perangkat IoT, menjalankan perintah, atau menyediakan data ke aplikasi lain.
Konsep Dasar HTTP Node
Alur HTTP di Node-RED:
=======================
Client (Browser/ESP32/App)
β
β HTTP Request (GET/POST)
βΌ
βββββββββββββββ
β http in β β Endpoint: /api/sensor
β (Server) β
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β function β β Proses data
ββββββββ¬βββββββ
β
ββββββββββββββββββββββββ
βΌ βΌ
βββββββββββββββ ββββββββββββββββ
β http output β β (opsional) β
β (Response) β β Simpan data β
ββββββββ¬βββββββ β ke database β
β ββββββββββββββββ
β HTTP Response (200 OK + JSON)
βΌ
Client menerima response
Contoh 1: API GET untuk Data Sensor
Buat endpoint yang mengembalikan data sensor terkini dari MQTT topic:
// Flow: REST API GET Data Sensor
//
// http-in βββΆ function βββΆ http-response
// βββΆ debug (opsional)
//
// Konfigurasi http-in:
// Method: GET
// URL: /api/sensor/suhu
//
// Konfigurasi function:
// msg.payload = {
// suhu: global.get("suhuTerkini") || 0,
// kelembaban: global.get("kelembabanTerkini") || 0,
// timestamp: new Date().toISOString()
// };
// msg.headers = { "Content-Type": "application/json" };
// return msg;
//
// Konfigurasi http-response:
// (otomatis dari http-in)
//
// Test di browser:
// GET http://localhost:1880/api/sensor/suhu
// Response: {
// "suhu": 28.5,
// "kelembaban": 65.2,
// "timestamp": "2026-06-20T10:30:00Z"
// }
Contoh 2: API POST untuk Kontrol Aktuator
Buat endpoint POST yang menerima perintah kontrol dan mengirim ke MQTT:
// Flow: REST API POST Kontrol Lampu
//
// http-in βββΆ function βββΆ mqtt-out
// ββββΆ http-response
//
// Konfigurasi http-in:
// Method: POST
// URL: /api/actuator/lampu
// Content-Type: application/json
//
// Konfigurasi function:
// var body = msg.payload;
// if (body.status === "on" || body.status === "off") {
// msg.payload = JSON.stringify({
// status: body.status,
// timestamp: new Date().toISOString()
// });
// msg.topic = "actuator/lampu/ruang-tamu";
// node.send([msg, null]);
//
// var response = {
// success: true,
// message: "Lampu " + body.status
// };
// node.send([null, { payload: response }]);
// } else {
// node.send([null, {
// payload: { success: false, message: "Invalid status" }
// }]);
// }
//
// Konfigurasi http-response:
// Status Code: msg.statusCode (atau default 200)
Saat menghadap ke jaringan publik, selalu tambahkan autentikasi pada endpoint HTTP. Gunakan node http auth atau tambahkan header token di function node. Jangan lupa untuk memvalidasi input dari HTTP request untuk mencegah injection attack.
8. Proyek: Otomasi Rumah dengan Node-RED + MQTT
Sekarang kita akan menggabungkan semua konsep yang telah dipelajari menjadi satu proyek nyata: sistem otomasi rumah yang mengontrol lampu, kipas, dan menampilkan dashboard monitoring suhu real-time. Proyek ini menggunakan ESP32 sebagai perangkat pengumpul data dan Node-RED sebagai otomasi central.
Arsitektur Sistem
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β SISTEM OTOMASI RUMAH β β β β βββββββββββββββ MQTT βββββββββββββββββββββββ β β β ESP32 #1 ββββββββββββββββΆβ β β β β Sensor DHT β β MQTT Broker β β β β Suhu+Humi β β (Mosquitto) β β β βββββββββββββββ β Port: 1883 β β β β β β β βββββββββββββββ MQTT β βββββββββββββ β β β β ESP32 #2 ββββββββββββββββββββββ Node-RED β β β β β Relay 2Ch β β β β β β β β Lampu+Kipasβ β β βββββββ β β β β βββββββββββββββ β β βFlow β β β β β β β ββββ¬βββ β β β β βββββββββββββββ β β β β β β β β Laptop / ββββ Dashboard β βββββββΌββββββ β β β β HP Browserβ (port 1880) β β β β β βββββββββββββββ ββββββββββββΌβββββββββββ β β β β β ββββββββ΄βββββββ β β β Dashboard β β β β Monitoring β β β βββββββββββββββ β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Flow 1: Monitoring Suhu Otomatis
Flow ini menerima data suhu dari ESP32 via MQTT, memprosesnya, dan menentukan aksi otomatis berdasarkan threshold yang ditentukan.
// ========================================
// Flow 1: Monitoring Suhu + Otomasi Kipas
// ========================================
//
// [mqtt-in] βββΆ [function: proses_suhu] βββΆ [ui_gauge]
// βββΆ [ui_chart]
// βββΆ [function: otomasi_kipas]
// β
// ββββββββββββββββββββ€
// βΌ βΌ
// [function: ON] [function: OFF]
// β β
// βΌ βΌ
// [mqtt-out] [mqtt-out]
// kipas: ON kipas: OFF
// ========================================
// Node Function: proses_suhu
// ========================================
var data = msg.payload;
var suhu = parseFloat(data.suhu);
var kelembaban = parseFloat(data.kelembaban);
var timestamp = new Date().toLocaleTimeString('id-ID');
// Simpan ke global untuk diakses API
global.set('suhuTerkini', suhu);
global.set('kelembabanTerkini', kelembaban);
global.set('terakhirUpdate', timestamp);
// Kirim data untuk gauge
gauge_msg = { payload: suhu };
node.send([gauge_msg, null, null, null]);
// Kirim data untuk chart
chart_msg = {
payload: [
{ series: ["Suhu", "Kelembaban"],
data: [[suhu], [kelembaban]],
labels: [timestamp] }
]
};
node.send([null, chart_msg, null, null]);
// Kirim suhu untuk logika otomasi
otomasi_msg = { payload: { suhu: suhu } };
node.send([null, null, otomasi_msg, null]);
// ========================================
// Node Function: otomasi_kipas
// ========================================
var suhu = msg.payload.suhu;
var thresholdHidup = 30; // Suhu di atas 30Β°C: kipas ON
var thresholdMati = 27; // Suhu di bawah 27Β°C: kipas OFF
var statusKipas = global.get('statusKipas') || 'off';
if (suhu >= thresholdHidup && statusKipas === 'off') {
// Aktifkan kipas
global.set('statusKipas', 'on');
node.send([{
payload: JSON.stringify({ status: "on",
suhuAktif: suhu }),
topic: "actuator/kipas/rumah"
}, null]);
} else if (suhu <= thresholdMati && statusKipas === 'on') {
// Matikan kipas
global.set('statusKipas', 'off');
node.send([null, {
payload: JSON.stringify({ status: "off",
suhuMatikan: suhu }),
topic: "actuator/kipas/rumah"
}]);
}
Flow 2: Kontrol Lampu Manual via Dashboard
// ========================================
// Flow 2: Kontrol Lampu via Dashboard
// ========================================
//
// [ui_switch] βββΆ [function] βββΆ [mqtt-out]
// Topic: actuator/lampu/rumah
//
// Node Function:
// msg.topic = "actuator/lampu/rumah";
// msg.payload = JSON.stringify({
// status: msg.payload ? "on" : "off",
// timestamp: new Date().toISOString()
// });
// return msg;
//
// ui_switch config:
// Group: Kontrol Lampu
// Label: "Lampu Ruang Tamu"
// On Payload: true
// Off Payload: false
// On Icon: lightbulb (fa-lightbulb)
// Off Icon: lightbulb-o (fa-lightbulb-o)
//
// ========================================
// Flow 2b: Kontrol via Timer/Schedule
// ========================================
//
// [ui_timepicker] βββΆ [function] βββΆ [change] βββΆ [mqtt-out]
// Topic: actuator/lampu/schedule
//
// Timer bisa dikirim ke ESP32 untuk
// scheduling lokal di mikrokontroler.
Flow 3: HTTP API untuk Monitoring Eksternal
// ========================================
// Flow 3: HTTP API untuk Status Rumah
// ========================================
//
// Endpoint 1: GET /api/status
// [http-in GET] βββΆ [function] βββΆ [http-response]
//
// Function:
// msg.payload = {
// suhu: global.get("suhuTerkini") || 0,
// kelembaban: global.get("kelembabanTerkini") || 0,
// lampu: global.get("statusLampu") || "off",
// kipas: global.get("statusKipas") || "off",
// lastUpdate: global.get("terakhirUpdate") || "-",
// timestamp: new Date().toISOString()
// };
// msg.headers = { "Content-Type": "application/json" };
// return msg;
//
// Endpoint 2: POST /api/alert
// [http-in POST] βββΆ [function: validate] βββΆ [mqtt-out]
// ββββΆ [http-response]
//
// Bisa dipanggil dari aplikasi mobile atau
// monitoring service seperti Grafana.
Flow 4: Dashboard Lengkap
// ======================================== // Flow 4: Dashboard Lengkap // ======================================== // // Tab: "Monitoring Rumah" // β // βββ Group: "Sensor Suhu & Kelembaban" // β βββ [ui_gauge] Suhu (Β°C) // β βββ [ui_gauge] Kelembaban (%) // β βββ [ui_chart] Histori Suhu // β βββ [ui_text] Status Terakhir // β // βββ Group: "Kontrol Perangkat" // β βββ [ui_switch] Lampu Ruang Tamu // β βββ [ui_switch] Lampu Kamar // β βββ [ui_slider] Kecerahan Lampu (0-100) // β βββ [ui_dropdown] Mode Kipas (Auto/Manual/OFF) // β // βββ Group: "Status Sistem" // βββ [ui_text] Status MQTT Broker // βββ [ui_text] Uptime Node-RED // βββ [ui_text] Jumlah Device Online
Mulai dengan satu flow saja terlebih dahulu (monitoring suhu), lalu tambahkan flow baru satu per satu. Gunakan link in/link out untuk menghubungkan flow tanpa kabel panjang. Selalu gunakan change node untuk menyimpan status ke flow context atau global context agar bisa diakses antar flow.
9. Quiz: Uji Pemahamanmu!
Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang Node-RED dan integrasi IoT: