Transform Nodes

Biến đổi message trong Rule Engine — script, đổi originator, rename keys, split array, và các phép chuyển đổi dữ liệu

Transform Nodes

Transform nodes biến đổi nội dung message — đổi payload, metadata, message type, hoặc tạo nhiều message từ một message. Output là message đã biến đổi, truyền tiếp cho node sau.


Script Transform (Transform Message)

Node linh hoạt nhất — viết script tùy chỉnh biến đổi message.

Biến đầu vào:

  • msg — Payload gốc
  • metadata — Metadata gốc
  • msgType — Loại message gốc

Script phải return:

  • Một object {msg, metadata, msgType}, hoặc
  • Mảng [{msg, metadata, msgType}, ...] để tạo nhiều message

Ví dụ 1 — Convert đơn vị:

// Fahrenheit → Celsius return { msg: { temperature: (msg.temperature - 32) * 5 / 9, humidity: msg.humidity }, metadata: metadata, msgType: msgType };

Ví dụ 2 — Tạo email từ telemetry:

return { msg: { from: "alerts@vielang.io", to: metadata.customerEmail, subject: "Cảnh báo nhiệt độ cao", body: "Thiết bị " + metadata.deviceName + " báo nhiệt độ: " + msg.temperature + "°C" }, metadata: metadata, msgType: "SEND_EMAIL" };

Ví dụ 3 — Split metrics thành nhiều message:

// Một message chứa nhiều metric → nhiều message riêng lẻ var results = []; var keys = Object.keys(msg); keys.forEach(function(key) { results.push({ msg: { key: key, value: msg[key], ts: metadata.ts }, metadata: metadata, msgType: msgType }); }); return results;

Change Originator

Thay đổi originator (nguồn gốc) của message sang entity khác:

Originator source: RELATED Direction: FROM Relation type: Contains Entity type: ASSET

Hữu ích khi muốn alarm/telemetry được ghi nhận cho Asset thay vì Device.


Rename Keys

Đổi tên các key trong message payload:

Rename rules: temp → temperature hum → humidity pres → pressure

Hữu ích khi thiết bị gửi key viết tắt, cần chuẩn hóa trước khi lưu.


Copy Keys

Sao chép giá trị từ msg sang metadata hoặc ngược lại:

From: msg To: metadata Keys: [deviceId, timestamp]

Delete Keys

Xóa các key không cần thiết:

From: msg Keys to delete: [raw_data, debug_info, internal_id]

Giảm kích thước message, loại bỏ dữ liệu nhạy cảm.


JSON Path

Trích xuất giá trị từ JSON phức tạp bằng JSONPath expression:

Source field: payload JSON Path: $.sensors[0].readings.temperature Target field: temperature

Ví dụ:

// Input msg { "device": "gateway-01", "payload": { "sensors": [ { "id": 1, "readings": { "temperature": 25.5, "humidity": 60 } } ] } }
Expression: $.sensors[0].readings.temperature Result: temperature = 25.5

Math Function Node

Thực hiện phép tính toán học không cần script:

Operation: CUSTOM Expression: temperature * 9/5 + 32 Result key: temperature_f

Toán tử hỗ trợ: +, -, *, /, %, ^, hàm: abs, ceil, floor, round, sqrt, log.


Split Array Message

Tách message chứa array thành nhiều message riêng lẻ:

// Input: một message { "readings": [ { "sensor": "A", "value": 25 }, { "sensor": "B", "value": 30 }, { "sensor": "C", "value": 28 } ] }

3 message output, mỗi message là một phần tử array.


To Email

Tạo email message từ template:

From: no-reply@vielang.io To: ${customerEmail} Subject: Cảnh báo từ ${deviceName} Body: Thiết bị ${deviceName} tại ${location} báo nhiệt độ: ${temperature}°C lúc ${ts}

Biến ${...} được lấy từ msgmetadata.


Output Routing

OutputÝ nghĩa
SuccessTransform thành công
FailureLỗi script hoặc cấu hình