Referensi node rule
Halaman ini merinci setiap node di editor Rules.
Objek message
Section titled “Objek message”Di Comparison, Lua, Go, dan template output, pesan tersedia sebagai message:
| Field | Isi |
|---|---|
channel |
Channel pesan. |
subtopic |
Subtopik. |
publisher |
ID device (atau rule/akun) yang mengirim, hasil autentikasi broker. |
protocol |
mqtt, ui (dikirim dari aplikasi), rule (dari Channel Publisher), schedule. |
created |
Waktu terima (detik epoch). |
payload |
Isi pesan yang sudah diurai: array record untuk SenML, objek untuk SenFlat dan JSON. |
history |
true bila pesan SenFlat v2 berstatus riwayat gateway (h = 1). |
timeTrusted |
false bila ada sumber SenFlat v2 yang jam perangkatnya tidak tepercaya. |
Indeks array di path dan Lua dimulai dari 1: message.payload[1].v. Untuk SenFlat v1, metrik ada di message.payload.m.<metrik>.
Channel Subscriber
Section titled “Channel Subscriber”| Isian | Keterangan |
|---|---|
| Channel | Channel yang diamati. |
| Topic | Subtopik. Wildcard + (satu tingkat) dan # (banyak tingkat). Kosong = semua subtopik. |
Menu Tambah Logic berisi: Bypass (teruskan apa adanya), Pemecah SenFlat v2 → baris, Comparison, Kode Lua, Kode Go, dan daftar Custom Nodes yang tersedia.

Setiap node logic memutuskan apakah pesan diteruskan. Hasil nil, false, atau kondisi tidak terpenuhi = pesan tidak diteruskan, sehingga output di bawahnya tidak berjalan.
Bypass
Section titled “Bypass”Meneruskan payload apa adanya. Cara termurah untuk menyimpan atau meneruskan semua pesan karena tidak menjalankan kode. Dipakai oleh template “Simpan ke Internal DB”.
Comparison
Section titled “Comparison”Satu atau beberapa baris kondisi:
If message.payload[1].v >= num 24.5- Path dengan notasi titik atau kurung:
message.payload.temp_inlet,message.payload.m.door_open. - Operator:
==,~=(tidak sama),>,<,>=,<=. - Tipe nilai:
num,string,bool. - Kondisi dirangkai dengan AND atau OR (AND dihitung lebih dulu). Maksimal 20 kondisi.
- Path yang tidak ada, atau bertipe lain dari yang dibandingkan, membuat kondisi salah.
- Bila terpenuhi, payload diteruskan apa adanya.
Kode Lua
Section titled “Kode Lua”Wajib berbentuk:
function logicFunction() -- baca message, kembalikan hasilendreturn logicFunction()Hasil: nil atau false = tidak diteruskan; true = payload apa adanya; tabel = hasil baru (array berurutan menjadi array JSON, selain itu objek). Sintaks diperiksa saat simpan dan galatnya ditampilkan di editor.
Sandbox: interpreter baru per eksekusi (tidak ada keadaan bocor antar-pesan), hanya pustaka base, table, string, dan math. Tanpa os, io, package, debug, load*, dofile, require. Waktu eksekusi 500 ms, dan ukuran hasil dibatasi.
-- Teruskan hanya bila suhu masuk di atas 23,5 dan bentuk alarmfunction logicFunction() for _, rec in ipairs(message.payload) do if rec.n and string.find(rec.n, "temp_inlet$") and rec.v and rec.v > 23.5 then return { severity = 70, cause = "Suhu masuk melewati batas", measurement = rec.n, value = rec.v, unit = "Cel" } end end return falseendreturn logicFunction()Kode Go
Section titled “Kode Go”Kode Go dijalankan di proses anak terpisah yang terisolasi, dengan daftar putih paket, timeout, dan batas memori; di Linux ditambah isolasi tingkat OS. Bentuknya mirip Lua: import m "messaging" dan fungsi logicFunction(). Ketersediaan bergantung konfigurasi server (administrator bisa menonaktifkannya).
Custom Node
Section titled “Custom Node”Memakai logic yang sudah Anda simpan di Custom Nodes, dengan versi tertentu.
Pemecah SenFlat v2 → baris
Section titled “Pemecah SenFlat v2 → baris”Memecah satu pesan SenFlat v2 (banyak sumber dan titik waktu) menjadi daftar baris lebar, satu baris per (sumber, waktu), tanpa Lua. Kolom dasar: device_id, t_ms, time, time_trusted, history, q, ditambah semua metrik pada waktu itu. Pesan yang bukan SenFlat v2 tidak diteruskan. Pemakaian lengkap: Rule ke PostgreSQL banyak baris.
Opsi bersama
Section titled “Opsi bersama”Semua node logic punya Cakupan data:
| Cakupan | Arti |
|---|---|
| Semua data | Data langsung dan seluruh riwayat (bawaan node lama). |
| Hanya data langsung | Mengabaikan riwayat gateway (bawaan Comparison baru). |
| Langsung dan riwayat segar | Riwayat yang umurnya tidak melebihi jendela menit (bawaan 5). |
Lua, Go, dan Custom Node juga punya Satuan evaluasi: Batch (kode berjalan sekali dan melihat seluruh daftar baris) atau Per baris. Comparison selalu menilai tiap baris sendiri.
Output
Section titled “Output”Output menentukan ke mana pesan pergi, termasuk apakah tersimpan. Menu Tambah Output berisi: Internal DB (SenML), Internal DB (JSON), Channel Publisher, E-Mail, Telegram, PostgreSQL, Webhook HTTP, Alarm, dan Alarm perangkat.

Internal DB (SenML) dan Internal DB (JSON)
Section titled “Internal DB (SenML) dan Internal DB (JSON)”Menyimpan ke database deret waktu internal. Yang SenML menerima SenML dan SenFlat (satuan diisi dari Katalog Metrik) dan memvalidasinya dengan ketat; yang JSON menyimpan hasil apa pun yang bisa dijadikan JSON (maksimal 1 MiB). Keduanya tampil di tab berbeda di Messages. Internal DB tidak menerima daftar baris dari pemecah.
Channel Publisher
Section titled “Channel Publisher”Mem-publish hasil logic ke channel (dan subtopik) lain, atas nama rule. Pesan tercatat dengan protokol rule. Rule yang menulis ke channel inputnya sendiri pada topik yang tercakup ditolak saat disimpan, demi mencegah putaran.
Membuat alarm dari objek hasil logic. Field berasal dari template node, atau bila kosong dari kunci bernama sama pada hasil logic:
| Field | Aturan |
|---|---|
severity |
Wajib, bilangan bulat 0 sampai 100. |
cause |
Wajib, teks. |
measurement |
Wajib, nama yang membedakan alarm. |
value, unit, threshold |
Opsional. |
Opsi auto-clear (tidak ada, setelah N menit tidak muncul lagi, atau setelah N pesan normal berturut-turut) dan bagian Data riwayat gateway (jendela riwayat dan alarm retroaktif). Detail: Alarms.
Alarm perangkat
Section titled “Alarm perangkat”Untuk perangkat yang menghitung alarm sendiri (metrik boolean berawalan alarm_): true membuka alarm, false menutupnya, dengan severity peringatan 40 dan alarm 80 (bisa diubah). Node di belakang gateway dikaitkan ke device lewat Serial. Tersedia template satu klik di halaman Rules.
Penerima, Subjek, dan Isi dengan template Go: {{.Result}}, {{.Result.<kunci>}}, dan {{.Message.<kunci>}}. Butuh SMTP yang dikonfigurasi di server.
Telegram
Section titled “Telegram”Token bot (disimpan terenkripsi), ID chat, dan isi pesan sebagai template.
PostgreSQL
Section titled “PostgreSQL”Menulis ke tabel di database PostgreSQL eksternal. Isian: host, port, user, password (terenkripsi), database, tabel, serta pemetaan kolom (template Go per kolom). Nama tabel dan kolom divalidasi dan di-quote, nilai selalu parameter, hasil kosong menjadi NULL.
- Sakelar Satu baris per elemen hasil (foreach) memasukkan banyak baris dalam satu
INSERTatomik (maksimal 500 baris dan 30 kolom per pesan), dengan.Row,.Index, dan fungsitsms. - Tombol Uji koneksi memverifikasi tanpa menulis.
Webhook HTTP
Section titled “Webhook HTTP”URL, metode, header (nilai terenkripsi), dan isi sebagai template, dengan percobaan ulang dan backoff.
Template Go
Section titled “Template Go”Isian bertemplate (e-mail, Telegram, webhook, PostgreSQL, field alarm) memakai sintaks text/template Go. Data yang tersedia: .Result (hasil logic), .Message (pesan asli), dan pada mode banyak baris .Row dan .Index. Fungsi bantu: json, tsms, dan printf.
Suhu {{printf "%.1f" (index .Result 0).v}} °C pada {{.Message.subtopic}}