Yükü çözün
Cihaz 00018d460000300040e12402 gönderir. Faturalama sisteminiz index: 18.061
ister. Aradaki iş çözücüdür.
Çözmeyi erken yapmak işe yarar: kurallar çözülmüş alanlara göre süzer ve özel çıktı düzenleyicisi yalnızca bir çözücünün ürettiğini gördüğü alanları önerebilir.
Çözücü nerede yaşar
Bir çözücü bir cihaza değil, bir cihaz profilinin teknolojisine bağlanır. Model için bir kez tanımlarsınız, o profildeki her cihaz aynı biçimde çözülür.
Nerede: Yazmak için Profiller → Çözücüler, sonra profilin teknolojisinde bağlayın. Ya da işleme hattı görünümünden aynı şey olan Akış → Çözücüler.
Bir tür seçin
Uyduğu sürece grameri tercih edin. Sonsuz döngüye giremez, beklenmedik biçimde hata veremez ve yük biçiminin belgesi gibi okunur.
İki çıktı grubu
Bir çözücü ölçümleri iki grup hâlinde döndürür ve bu ayrım hedefinize kadar taşınır:
{
"telemetry": { "index": 18.061, "unit": "m3", "battery": 100 },
"meta": { "seqNumber": 18, "rssi": -103.41 }
}
telemetry, cihazın ölçtüğüdür. meta, iletimle ilgilidir. Alanları doğru
gruba koyun — bazı çıktı biçimleri yalnızca birini iletir ve meta altına
konmuş bir ölçüm, telemetri bekleyen bir hedefte kaybolur.
JavaScript sandbox'ı
JavaScript çözücüler yalıtılmış bir V8 sandbox'ında çalışır:
- Ağ yok, dosya sistemi yok. Bir çözücü dışarı çağrı yapamaz.
- Bellek ve süre sınırlıdır. Kontrolden çıkan bir betik yalnızca o mesajı başarısız kılar; işleme hattı çalışmaya devam eder.
- TypeScript sözdizimi kabul edilir; tipler çalıştırmadan önce ayıklanır.
Çözme başarısız olduğunda
Çözme, elinden geleni yapar. Hata veren bir çözücü, çözücüsü olmayan bir profil veya hiç yük taşımayan bir callback mesajı başarısız kılmaz — elindekiyle devam eder.
Bu bilinçlidir: bir ölçümü kaybetmek, onu çözülmemiş iletmekten kötüdür. Ama şu anlama gelir: bir hedef aynı cihaz için iki farklı biçim görebilir.
Yanlış görünen bir mesajda payload.decodeError alanına bakın. "Çözücü
bozuk" ile "bu callback'in zaten çözülecek bir yükü yoktu" arasındaki fark
budur.
DATA_UPLINK, DATA_BIDIR ve SERVICE_DATA_ADVANCED bir yük çerçevesi
içerir. Durum, onay, tekrarlayıcı ve hata callback'lerinde çözülecek bir şey
yoktur ve geldikleri gibi iletilirler — bu bir çözücü hatası değildir. Hedefiniz
bunları görmemeliyse bir kuralla süzün.Şifre çözme
Profil şifreleme tanımlıyorsa yük, cihazın bağlamasındaki anahtar kullanılarak çözmeden önce deşifre edilir. Anahtarlar şifrelenerek saklanır ve bir daha gösterilmez — düzenlerken saklı değeri korumak için alanı boş bırakın.
Test edin
Düzenleyicide bir Bir yükle test edin paneli vardır. Bir cihazın
göndereceği baytları hex olarak yapıştırın, mesaj türünü ve callback'in
taşıyacağı diğer giriş alanlarını (device, seqNumber, rssi, ack…)
ayarlayın ve Çalıştır'a basın. Betik sunucuda, alımın kullandığı codec'in
aynısıyla çalışır — tarayıcıdaki bir kopyayla değil — dolayısıyla dönen şey,
gerçek bir mesajın üreteceği şeydir: telemetry, meta, hata fırlattıysa
hata ve Yönlendirme'nin sunacağı alanların listesi.
En sık karşılaşılan sürpriz burada tek tıkla görünür: yanlış uzunlukta bir yük.
bytes.length'i kontrol edip yalnızca meta.error döndüren bir çözücü
telemetri üretmez ve ona bağlanmış bir hedef yalnızca o hatayı alır — panel
bunu, siz hedeften öğrenmeden önce gösterir.
Yönlendirme örneği olarak kullan, çalıştırmayı çözücünün kayıtlı çıktı şekli ve örneği olarak saklar. Bu, alımın ilk gerçek mesajdan sonra yazdığı kaydın aynısıdır, ondan önce yazılmış hâli: bu kaynağı kullanan bir çift için Akış → Yönlendirme'yi açın; alan seçici bu alanları listeler, önizleme bu değerleri gösterir — iletimi yapan kod tarafından oluşturulmuş olarak, yani gördüğünüz, hedefin aldığıdır. Betik kaydedildiğinden beri değiştiyse düğme önce kaydeder; örnek, gerçekten çalışacak betikten gelmelidir.
Daha sonra gelen gerçek bir uplink kaydı, cihazın gerçekten gönderdiğiyle yeniler.
Diğer yön: bir downlink kodlamak
Çözücü bir codec'in yarısıdır. Aynı satır, Center'ın cihaza yanıt vermesi
gerektiğinde çalışacak ikinci bir işlev taşıyabilir: encodeDownlink. Bir
kuraldan (ve daha sonra cihazın kuyruğundan) komutlar alır —
{ name: 'valveOpen', args: { value: false } } — artı yanıtlanan uplink'i, ve
gönderilecek tek çerçeveyi döndürür: { bytes } ya da { hex }, Sigfox'ta tam
8 bayt, LoRaWAN'da tam baytlar.
Codec'i açın, Çözücü → Kodlayıcı'ya geçin, Bu codec'in bir kodlayıcısı var anahtarını açın ve editörün yüklediği tiplere göre yazın. Komutlarla test et paneli onu, tarif ettiğiniz komutlar ve uplink ile sunucuda çalıştırır ve çerçeveyi bayt bayt gösterir. Onu kullanan kural Downlink ile yanıtlayın sayfasında anlatılır.