Yeni: Yapay zekâ güvenlik duvarı her modülü izliyor ve her olayı sade bir dille açıklıyor. Nasıl çalıştığını görün

Veri dönüşüm blokları

Change, Calculate, Scale, Template, JSON, CSV, XML, Hex, Base64 ve Bytes blokları için başvuru – mesaj verisini yeniden şekillendiren, hesaplayan ve çözen bloklar.

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.

AyarAnlamıDeğerler
opsAdımlaren fazla 16 satır

Her adım:

opYaptığı işAlanlar
setBir değer yazar; eksik üst öğeler oluşturulurpath, value (her türde değer)
changeMetin içindeki her from geçişini to ile değiştirir; metin olmayanlara dokunulmazpath, from, to, regex (en fazla 64 karakterlik bir desen)
deleteÖzelliği ya da değişkeni kaldırırpath
moveto 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 keyspath’teki nesnenin, tam adı Keys matching ile eşleşen her üst düzey anahtarını To object içine kopyalarpath, Keys matching, To object
delete keysTam adı eşleşen her üst düzey anahtarı silerpath, 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.

AyarAnlamıVarsayılanDeğerler
exprİfadezorunluen fazla 512 karakter
targetSonucun yazılacağı yermsg.payloadbir 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.

AyarAnlamıVarsayılanDeğerler
propertySayımsg.payloadbir yol
in_min, in_maxGiriş aralığı0, 4095sayılar, eşit olmayan
out_min, out_maxÇıkış aralığı0, 100sayılar
modeÇıkış aralığının dışındaclampclamp (sınırla), wrap (sarmala), free (serbest bırak)
roundOndalık basamakyok0 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.

AyarAnlamıVarsayılanDeğerler
templateMetin{{ msg.payload }}en fazla 4.096 karakter
targetSonucun yazılacağı yermsg.payloadbir msg., flow. veya global. yolu
formattext, veya json (sonuç JSON olarak ayrıştırılır)texttext, 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.

AyarAnlamıVarsayılanDeğerler
modeauto (metni ayrıştır, diğerlerini geçir), parse, stringifyauto
propertyÖzellikmsg.payloadbir yol

Hatalar: invalid_value “not JSON: …” veya “not a string”.

CSV

CSV metnini kayıtlara, ya da kayıtları CSV metnine, yerinde çevirir.

AyarAnlamıVarsayılanDeğerler
modeauto, decode, encodeauto
propertyÖzellikmsg.payloadbir yol
sepAlan ayırıcıvirgülvirgül, noktalı virgül, sekme, dikey çizgi
headerDecode: ilk satır adları içerir. Encode: bir başlık satırı yazaroffon, off
columnsSütun adları, virgülle ayrılmışboşen fazla 256 karakter
numbersDecode: sayıya benzeyen alanlar sayı oluroffon, off
outputDecode: tüm kayıtlarla tek mesaj (array) ya da her kayıt için bir mesaj (rows)arrayarray, 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.

AyarAnlamıVarsayılan
Modeparse, build veya auto
PropertyDönüşümün yapıldığı yermsg.payload
Attribute prefixÖznitelik anahtarlarının öneki@
Text keyAlt öğelerin yanındaki metnin anahtarı#text
Arrays / array elementsHangi öğelerin her zaman dizi olacağı
NumbersSayısal metinler sayı oluroff
SelectYalnızca bir öğe yolunu tutar, ör. soap:Envelope/soap:Body/*/m:Price
Root, DeclarationOluşturma: kök öğe adı, <?xml …?> satırı
Max bytesEn büyük girdi64 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.

AyarAnlamıVarsayılanDeğerler
modeHangi yönautoauto, encode, decode
propertyÖzellikmsg.payloadbir 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.

AyarAnlamıVarsayılanDeğerler
modeOkuma ya da oluşturmadecodedecode, encode
fieldsAlan başına bir satırboşen fazla 16 satır

Her alan:

AlanAnlamıVarsayılanDeğerler
nameSonuçtaki anahtarzorunluönce bir harf ya da _, en fazla 32 karakter
offsetİlk bayt, 0’dan başlayarak00 ile 4.095 arası
typeBoyut ve türu16u8, i8, u16, i16, u32, i32, f32
leLittle endianoff (big endian)on, off
bitsBit aralığı start:lengthtüm alanör. 0:1, 4:3
scaleDecode: × ölçek; encode: ÷ ölçek1bir 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.