β˜€οΈSiang
Tools

Panduan Lengkap Node-RED untuk IoT: Visual Programming Otomasi

GRATIS

Pelajari Node-RED dari nol hingga mahir β€” mulai dari visual programming, integrasi MQTT, pembuatan dashboard, hingga proyek otomasi rumah pintar

Artikel: Node Red Iot Artikel: Node Red Iot


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.

Diagram: Konsep Visual Programming Node-RED
Konsep Visual Programming Node-RED

Trigger

πŸ’‰ INJECT\n(Timer)

βš™οΈ FUNCTION\n(Proses)

πŸ“‘ MQTT\n(Publish)

πŸ› DEBUG\n(Console)

🌐 HTTP\n(Request)

Use Cases Node-RED dalam IoT

Use Case Deskripsi Contoh Penerapan
Otomasi RumahKontrol lampu, AC, pintu otomatis berdasarkan sensorLampu menyala otomatis saat gelap
Monitoring & LoggingMengumpulkan data sensor dan menyimpan ke databaseLog suhu dan kelembaban ke InfluxDB
Gateway IoTBridge antara protocol berbeda (MQTT, HTTP, CoAP)Konversi data Modbus ke MQTT
Dashboard Real-timeVisualisasi data sensor secara real-time di browserDashboard suhu ruangan
Alert & NotifikasiKirim notifikasi jika kondisi tertentu terpenuhiAlert jika suhu melebihi 40Β°C
Integrasi LayananHubungkan IoT dengan layanan cloudKirim data ke Google Sheets
πŸ’‘ Mengapa Node-RED?

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

flowchart TB
    subgraph palette["🎨 PALETTE"]
        P1["inject"]
        P2["function"]
        P3["debug"]
        P4["mqtt out"]
    end
    
    subgraph canvas["πŸ“‹ CANVAS (Workspace)"]
        C1["inject"] -->|"msg.payload"| C2["function"]
        C2 --> C3["debug"]
        C2 --> C4["mqtt out"]
    end
    
    subgraph debug["πŸ› DEBUG / INFO"]
        D1["msg.payload: {"temp: 25.5"}"]
    end

    style palette fill:#0f1d3a,stroke:#60a5fa,stroke-width:2px
    style canvas fill:#0a0a12,stroke:#3ecf8e,stroke-width:2px
    style debug fill:#2a1f0a,stroke:#f59e0b,stroke-width:2px

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.

πŸ’‘ Tips Organisasi Flow

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
ImportImpor flow dari clipboard atau file JSONCtrl + I
ExportEkspor flow ke clipboard atau fileCtrl + E
DeployTerapkan perubahan ke runtimeCtrl + D
Manage PaletteInstall/hapus node dari paletteβ€”
SettingsPengaturan editor dan runtimeβ€”
Search FlowsCari node di semua flowCtrl + 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.

Diagram

πŸ“± Widgets

🌑️ Gauge\n(Suhu)

πŸ’§ Chart\n(Kelembaban)

πŸ’‘ Switch\n(Lampu)

πŸ“ˆ Chart\n(Riwayat)

πŸ“Š Groups

🏠 Ruang Tamu

🍳 Dapur

πŸ“Š Monitoring

Widget Dashboard

Widget Fungsi Data Type
ui_gaugeMenampilkan angka dengan indikator visual (lingkaran/arah)Number
ui_chartChart data time-series (bar, line, pie)Array / Number
ui_textMenampilkan teks atau angka sederhanaString / Number
ui_switchToggle on/off (untuk kontrol aktuator)Boolean
ui_sliderSlider untuk mengatur nilai (0-100)Number
ui_dropdownDropdown pilihanString
ui_tableTabel dataArray of objects
ui_buttonTombol aksiTrigger
ui_colour_pickerPemilih warna (untuk LED RGB)Hex color

Contoh Flow Dashboard

Diagram

GET /api/temp

JSON

🌐 Browser

http in\n(Server)

function\n(Query DB)

http output\n(Response)

Contoh 1: API GET untuk Data Sensor

Buat endpoint yang mengembalikan data sensor terkini dari MQTT topic:

Diagram

MQTT

GPIO

MQTT

πŸ“‘ Sensors

ESP32 #1\nDHT (Suhu+Humi)

ESP32 #2\nPIR (Motion)

Node-RED\nFlow

MQTT Broker\n(Mosquitto)

Relay Module\n(Lampu/AC)

InfluxDB

πŸ“Š Grafana\nDashboard

πŸ“± Node-RED\nDashboard

Flow 1: Monitoring Suhu Otomatis

Flow ini menerima data suhu dari ESP32 via MQTT, memprosesnya, dan menentukan aksi otomatis berdasarkan threshold yang ditentukan.

Node-RED Flow β€” Monitoring & Otomasi Suhu
// ========================================
// 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

Node-RED Flow β€” Kontrol Lampu
// ========================================
// 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

Node-RED Flow β€” HTTP API Monitoring
// ========================================
// 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

Node-RED Flow β€” 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
πŸ’‘ Tips Proyek

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:

Pertanyaan 1: Apa kepanjangan dari "Node" dalam Node-RED?

a) Network Operating Terminal Engine for Realtime Development
b) Networking & Operation Tool for Embedded Devices
c) Blok fungsi individual yang mewakili satu unit kerja dalam alur visual
d) Node adalah server yang menjalankan Node-RED

Pertanyaan 2: Node-RED dibangun di atas runtime JavaScript berbasis apa?

a) Node.js
b) Python
c) Java
d) Ruby on Rails

Pertanyaan 3: Port default yang digunakan oleh Node-RED untuk akses editor adalah...

a) 8080
b) 3000
c) 8000
d) 1880

Pertanyaan 4: Node mana yang digunakan untuk menulis kode JavaScript kustom di Node-RED?

a) inject
b) function
c) change
d) debug

Pertanyaan 5: Untuk akses dashboard Node-RED di browser, URL yang benar adalah...

a) http://localhost:1880/ui
b) http://localhost:1880/dashboard
c) http://localhost:1880/#ui
d) http://localhost:1880/admin/dashboard

← Sebelumnya Setup Arduino IDE Selanjutnya β†’ Grafana + InfluxDB
πŸ” Zoom
100%
🎨 Tema