Lewati ke konten

Referensi node rule

Halaman ini merinci setiap node di editor Rules.

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>.

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.

Menu Tambah Logic berisi Bypass, Pemecah SenFlat v2, Comparison, Kode Lua, Kode Go, dan Custom Nodes.
Menu Tambah Logic.

Setiap node logic memutuskan apakah pesan diteruskan. Hasil nil, false, atau kondisi tidak terpenuhi = pesan tidak diteruskan, sehingga output di bawahnya tidak berjalan.

Meneruskan payload apa adanya. Cara termurah untuk menyimpan atau meneruskan semua pesan karena tidak menjalankan kode. Dipakai oleh template “Simpan ke Internal DB”.

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.

Wajib berbentuk:

function logicFunction()
-- baca message, kembalikan hasil
end
return 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 alarm
function 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 false
end
return logicFunction()

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).

Memakai logic yang sudah Anda simpan di Custom Nodes, dengan versi tertentu.

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.

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 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.

Menu Tambah Output berisi Internal DB, Channel Publisher, E-Mail, Telegram, PostgreSQL, Webhook HTTP, Alarm, dan Alarm perangkat.
Menu Tambah Output.

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.

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.

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.

Token bot (disimpan terenkripsi), ID chat, dan isi pesan sebagai template.

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 INSERT atomik (maksimal 500 baris dan 30 kolom per pesan), dengan .Row, .Index, dan fungsi tsms.
  • Tombol Uji koneksi memverifikasi tanpa menulis.

URL, metode, header (nilai terenkripsi), dan isi sebagai template, dengan percobaan ulang dan backoff.

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}}