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ốcmetadata— Metadata gốcmsgType— 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ừ msg và metadata.
Output Routing
| Output | Ý nghĩa |
|---|---|
Success | Transform thành công |
Failure | Lỗi script hoặc cấu hình |