Dönüşüm blokları mesajı değiştirir ve ileri gönderir. Save telemetry öncesinde anahtarları yeniden adlandırmak, değer hesaplamak, metin oluşturmak ve ham cihaz verisini çözmek için bunları kullanırsınız. Her birinin bir out çıkışı ve bir error çıkışı vardır. Hiçbiri durum (state) tutmaz.
Change
Mesajın ve flow ya da global değişkenlerin özelliklerini, üstten alta doğru adımlarla ayarlar, düzenler, siler veya taşır.
| Ayar | Anlamı | Değerler |
|---|---|---|
| ops | Adımlar | en fazla 16 satır |
Her adım:
| op | Yaptığı iş | Alanlar |
|---|---|---|
set | Bir değer yazar; eksik üst öğeler oluşturulur | path, value (her türde değer) |
change | Metin içindeki her from geçişini to ile değiştirir; metin olmayanlara dokunulmaz | path, from, to, regex (en fazla 64 karakterlik bir desen) |
delete | Özelliği ya da değişkeni kaldırır | path |
move | to içindeki yola kopyalar, ardından özgün öğeyi siler. Düzenleyici henüz to alanını göstermez; bunun yerine set ve delete kullanın. | path, to |
copy keys | path’teki nesnenin, tam adı Keys matching ile eşleşen her üst düzey anahtarını To object içine kopyalar | path, Keys matching, To object |
delete keys | Tam adı eşleşen her üst düzey anahtarı siler | path, Keys matching |
Yollar msg., flow. veya global. yollarıdır (kalıcı depo için flow.persist:x). Motor alanları (_…), msg.msgType ve msg.originator yazılamaz. Hatalar: invalid_value ile invalid_path, read_only, invalid_key, limit (değişken deposu dolu) veya bad pattern; hata veren adımdan önceki adımlar zaten uygulanmıştır.
Örnek: kaydetmeden önce bir cihazın anahtarını yeniden adlandırma: adım 1, msg.payload.temperature için set, yol msg.payload.tmp; adım 2, msg.payload.tmp için delete.
Calculate
Bir ifadeyi hesaplar ve sonucu yazar.
| Ayar | Anlamı | Varsayılan | Değerler |
|---|---|---|---|
| expr | İfade | zorunlu | en fazla 512 karakter |
| target | Sonucun yazılacağı yer | msg.payload | bir msg., flow. veya global. yolu |
7 / 2 sonucu 3.5 olur; iki taraftan biri metinse + metinleri birleştirir; null ya da herhangi bir metin üzerinde aritmetik ("21.5" bile olsa) type ile başarısız olur: number() ile dönüştürün. Hatalar: invalid_value, type, div_zero, steps, limit. Fonksiyonlar için bkz. Condition blocks.
Örnekler: round(msg.payload.temperature * 1.8 + 32, 1); 10 * log10(msg.payload.ratio); clamp(msg.payload.level, 0, 100).
Scale
Bir sayıyı bir aralıktan başka bir aralığa doğrusal olarak, yerinde eşler.
| Ayar | Anlamı | Varsayılan | Değerler |
|---|---|---|---|
| property | Sayı | msg.payload | bir yol |
| in_min, in_max | Giriş aralığı | 0, 4095 | sayılar, eşit olmayan |
| out_min, out_max | Çıkış aralığı | 0, 100 | sayılar |
| mode | Çıkış aralığının dışında | clamp | clamp (sınırla), wrap (sarmala), free (serbest bırak) |
| round | Ondalık basamak | yok | 0 ile 10 arası |
Formül: out_min + (value − in_min) × (out_max − out_min) / (in_max − in_min). Sayısal metinler ve true/false (1/0) sayı sayılır. Hata invalid_value (“not a number” veya boş giriş aralığı).
Template
{{ expression }} yer tutucularından metin ya da bir JSON değeri oluşturur.
| Ayar | Anlamı | Varsayılan | Değerler |
|---|---|---|---|
| template | Metin | {{ msg.payload }} | en fazla 4.096 karakter |
| target | Sonucun yazılacağı yer | msg.payload | bir msg., flow. veya global. yolu |
| format | text, veya json (sonuç JSON olarak ayrıştırılır) | text | text, json |
null boş olur; nesneler ve diziler JSON olarak yazılır. JSON çıktısı için metin yer tutucularını kendiniz tırnak içine alın: {"temp": {{ msg.payload }}, "unit": "{{ flow.unit }}"}. Sonuç en fazla 64 KB metindir.
JSON
JSON metnini bir değere ya da bir değeri JSON metnine, yerinde çevirir.
| Ayar | Anlamı | Varsayılan | Değerler |
|---|---|---|---|
| mode | auto (metni ayrıştır, diğerlerini geçir), parse, stringify | auto | |
| property | Özellik | msg.payload | bir yol |
Hatalar: invalid_value “not JSON: …” veya “not a string”.
CSV
CSV metnini kayıtlara, ya da kayıtları CSV metnine, yerinde çevirir.
| Ayar | Anlamı | Varsayılan | Değerler |
|---|---|---|---|
| mode | auto, decode, encode | auto | |
| property | Özellik | msg.payload | bir yol |
| sep | Alan ayırıcı | virgül | virgül, noktalı virgül, sekme, dikey çizgi |
| header | Decode: ilk satır adları içerir. Encode: bir başlık satırı yazar | off | on, off |
| columns | Sütun adları, virgülle ayrılmış | boş | en fazla 256 karakter |
| numbers | Decode: sayıya benzeyen alanlar sayı olur | off | on, off |
| output | Decode: tüm kayıtlarla tek mesaj (array) ya da her kayıt için bir mesaj (rows) | array | array, rows |
Tırnaklama RFC 4180’i izler. 10.000 satırı ya da kaydı aşınca queue_full hatası.
XML
XML metnini bir nesneye, ya da bir nesneyi XML metnine çevirir.
| Ayar | Anlamı | Varsayılan |
|---|---|---|
| Mode | parse, build veya auto | |
| Property | Dönüşümün yapıldığı yer | msg.payload |
| Attribute prefix | Öznitelik anahtarlarının öneki | @ |
| Text key | Alt öğelerin yanındaki metnin anahtarı | #text |
| Arrays / array elements | Hangi öğelerin her zaman dizi olacağı | |
| Numbers | Sayısal metinler sayı olur | off |
| Select | Yalnızca bir öğe yolunu tutar, ör. soap:Envelope/soap:Body/*/m:Price | |
| Root, Declaration | Oluşturma: kök öğe adı, <?xml …?> satırı | |
| Max bytes | En büyük girdi | 64 KiB (1 ile 256 KiB arası) |
<!DOCTYPE içeren belge reddedilir. En fazla 10.000 öğe, öğe başına 64 öznitelik, ad başına 128 karakter. Hatalar: parse_error, dtd_refused, too_large, too_deep, bad_name, no_root.
Hex ve Base64
Bir özelliği hex (bayt başına iki küçük harfli rakam) ya da base64 metnine kodlar, ya da geri çözer.
| Ayar | Anlamı | Varsayılan | Değerler |
|---|---|---|---|
| mode | Hangi yön | auto | auto, encode, decode |
| property | Özellik | msg.payload | bir msg., flow. veya global. yolu |
auto modunda hex (ya da base64) gibi görünen metin çözülür, diğerleri kodlanır; test gibi kısa sözcükler ya da 2024 gibi rakamlar da geçerli base64 ya da hex’tir, bu yüzden yönü bildiğinizde encode ya da decode seçin. Hex çözümü boşlukları ve iki noktaları yok sayar.
Bytes
Ikili verilerden adlandırılmış sayıları okur ya da sayılardan ikili veri oluşturur.
| Ayar | Anlamı | Varsayılan | Değerler |
|---|---|---|---|
| mode | Okuma ya da oluşturma | decode | decode, encode |
| fields | Alan başına bir satır | boş | en fazla 16 satır |
Her alan:
| Alan | Anlamı | Varsayılan | Değerler |
|---|---|---|---|
| name | Sonuçtaki anahtar | zorunlu | önce bir harf ya da _, en fazla 32 karakter |
| offset | İlk bayt, 0’dan başlayarak | 0 | 0 ile 4.095 arası |
| type | Boyut ve tür | u16 | u8, i8, u16, i16, u32, i32, f32 |
| le | Little endian | off (big endian) | on, off |
| bits | Bit aralığı start:length | tüm alan | ör. 0:1, 4:3 |
| scale | Decode: × ölçek; encode: ÷ ölçek | 1 | bir sayı |
Decode, msg.payload içindeki hex metnini (boşluk ve iki noktalar yok sayılır) ya da bayt değerleri dizisini okur ve { name: value } yazar. Encode hex metni yazar. Veri hex değilse ya da bir alan sonunun ötesinde kalırsa invalid_value hatası.
Örnek: 00d7ff9c ham payload’ı, temp (offset 0, i16, scale 0.1) ve pressure (offset 2, i16) ile { "temp": 21.5, "pressure": -100 } sonucunu verir.
Ham cihaz verisinin çözülmesi
İkili veri gönderen bir cihaz tek raw anahtarıyla gelir (ikili veri için base64). Save telemetry öncesinde kök flow’da tipik bir çözücü:
Switch (msg.payload.raw nempty) → Change: set msg.payload to the path msg.payload.raw
→ Base64 (decode) → Hex (encode) → Bytes (decode fields) → Save telemetry
Dağıtmadan önce sonucu Test ile kontrol edin. LoRaWAN cihazları için bunun yerine codec kullanın; bkz. Codecs overview. Blokların ifade edemediği durumlar için The script block kullanın.

