Kütüphanede sensörünüz için codec yoksa ya da bir kütüphane codec’inden farklı bir çıktı istiyorsanız, kendi codec’inizi yazarsınız. Codec’leriniz betik değil, JSON tablolarıdır: Hermetry bir codec’ten asla kod çalıştırmaz. Bunları kuruluşunuzda yayımlarsınız; cihazlarınız ve profilleriniz de kütüphane codec’leri gibi bunları kullanabilir.
Codec yazmak için kendi LoRaWAN codec’lerinizi ekleme, değiştirme ve silme iznine ihtiyacınız vardır (varsayılan olarak yöneticiler). Her yayımlama ve silme denetlenir.
Başlamanın iki yolu
Bir kütüphane codec’inin kopyasını kaydedin
Bir kütüphane codec’i ihtiyacınıza yakın olduğunda en iyisidir.
- Cihazlar > ⋯ > LoRaWAN codec’leri yolunu açın ve kütüphane codec’ini açın.
- Bir kopya kaydet seçeneğini seçin.
- Düzenleyici, kütüphane tablosu,
t.<kütüphane id>kimliği (isterseniz değiştirin), kökentenantve kopyalanan codec’i ve revizyonu adlandıran bir kaynak satırıyla açılır. - Tabloyu değiştirin, Denetle ardından Yayımla seçeneğini seçin.
Yeni bir codec başlatın
- Codec çekmecesinde Yeni codec seçeneğini seçin.
- Kimlik alanını girin ve Codec tablosu (JSON) altına tabloyu yapıştırın ya da yazın. Düzenleyici başlamanız için bir taslak sunar.
- Denetle ardından Yayımla seçeneğini seçin.
Kimlikler
Codec kimlikleriniz t. ile başlar, ardından 2 ila 62 küçük harf, rakam veya tire gelir; örneğin t.cold-room-probe. Kimlik daha sonra asla değişmez. Kuruluşunuzda zaten kullanılan bir kimlik reddedilir: a codec with this id exists. Choose another id.
Codec tablosu
Codec bir JSON belgesidir. Ana alanları şunlardır:
| Alan | Zorunlu | Anlamı |
|---|---|---|
id | Evet | Codec kimliği (t.…) |
title | Evet | En fazla 160 karakterlik okunabilir bir ad |
vendor | Evet | Cihaz üreticisi, en fazla 64 karakter |
models | Hayır | Bu codec’in kapsadığı model adları (en fazla 64) |
fports | Hayır | Çözdüğü FPort’lar (1–255, en fazla 64). Tüm portlar için bırakın. |
oui | Hayır | Üretici kodları: DevEUI’nin ilk 6 onaltılık rakamı, büyük harfle (en fazla 32). Otomatik seçimde kullanılır. |
kind | Hayır | layout (sabit bayt konumlarında alanlar) ya da tlv (kanal, tür, veri kayıtları) |
frames | layout için | Çerçeveleri birbirinden ayırma yöntemi (fport, length, min_length, işaret byte ya da maskeli bits ile) ve her birinin fields alanları |
channels, types, attributes, default | tlv için | Kayıt tanımları |
tests | Evet, en az bir tane | Test vektörleri: fport, hex ve beklenen expect değerleri (en fazla 200) |
Bir layout çerçevesindeki bir alanın at (bayt ofseti), field (çıktı anahtarı), fmt (bayt biçimi) alanları vardır; isteğe bağlı olarak scale, digits, offset, unit ve enum de eklenebilir. Biçimler arasında u8, i8, u16be, u16le, i16be, i16le, u24be, u24le, u32be, u32le, i32be, i32le, f32be, f32le, hex, ascii ve bir baytın bit split değerleri bulunur.
Tanınmayan üst düzey alanlar reddedilir. JavaScript kod çözücüler kabul edilmez: this is a JavaScript decoder. Only the table format is accepted.
Örnek
FPort 2 üzerinden şunları gönderen bir sensör: pil mV cinsinden (2 bayt), sıcaklık °C’nin onda biri cinsinden (2 bayt, işaretli) ve nem % cinsinden (1 bayt):
{
"id": "t.room-sensor",
"title": "Room sensor, temperature and humidity",
"vendor": "Example maker",
"models": ["RS-1"],
"fports": [2],
"kind": "layout",
"frames": [
{
"fport": 2,
"min_length": 5,
"fields": [
{ "at": 0, "field": "battery", "fmt": "u16be", "unit": "mV" },
{ "at": 2, "field": "temperature", "fmt": "i16be", "scale": 0.1, "unit": "°C" },
{ "at": 4, "field": "humidity", "fmt": "u8", "unit": "%" }
]
}
],
"tests": [
{ "name": "normal reading", "fport": 2, "hex": "0BC4010A32",
"expect": { "battery": 3012, "temperature": 26.6, "humidity": 50 } }
]
}
Ölçeklenmiş değerler, alan digits belirtmedikçe 2 ondalık basamağa yuvarlanır.
Denetleme ve yayımlama
Denetle her test vektörünü çalıştırır ve her birini Passes ya da Fails olarak, What differs ile birlikte gösterir. Hepsi geçtiğinde: Every test vector passes. Publishing makes it available to your devices and routers.
Yayımla aynı denetimleri yeniden çalıştırır ve codec’i Not published: ile nedenini göstererek reddeder:
| Gösterilen neden | Anlamı |
|---|---|
| metin geçerli bir JSON değil. | JSON sözdizimini düzeltin. |
| bir alan eksik ya da izin verilmiyor (…). | Zorunlu bir alan eksik ya da bilinmeyen bir alan mevcut. |
| kimlik, t. ile başlayıp küçük harf, rakam ve tireden oluşmalıdır. | Kimliği düzeltin. |
| codec 40960 bayttan büyük. | Codec’leriniz 40 KB ile sınırlıdır. |
| tablolar beklenen biçimde değil (…). | Bir çerçeve ya da alan tanımı hatalı. |
| bir codec en az bir test vektörü gerektirir. | Bir test vektörü ekleyin. |
| bazı test vektörleri başarısız (aşağıya bakın). | Tabloyu ya da beklenen değerleri düzeltin. |
| yayımlanmış bir sürümün çözdüğü anahtarlardan bazıları artık bu sürümde çözülmüyor (…). Bunun yerine yeni bir kimlikle yayımlayın. | Aşağıdaki revizyonlara bakın. |
| codec’lerinizden biri zaten models değerlerini kapsıyor. | Codec’lerinizden ikisi aynı modeli talep edemez. |
Tablolar en fazla 32 seviye derinliğinde iç içe geçebilir.
Revizyonlar
Mevcut bir codec’in her yayımlaması yeni bir revizyon oluşturur. Akışlarınızı ve panolarınızı korumak için yeni bir revizyon anahtar ekleyebilir ancak hiçbir anahtarı kaldıramaz ya da yeniden adlandıramaz ve bir anahtarın birimini değiştiremez. Anahtarları kaldırmanız ya da yeniden adlandırmanız gerekiyorsa, yeni bir kimlikle yayımlayın ve cihazlarınızı ona taşıyın.
Codec sayfasındaki Revizyonlar bölümü, her revizyonu boyutu ve anahtar sayısıyla listeler.
Codec’iniz ve kütüphane
Your codecs are tried before the library’s in the automatic choice. A copy keeps the library codec’s maker codes and FPorts, so devices of that maker on Automatic move to your copy as soon as you publish it. One of your codecs may claim the same model as a library codec; that is how you override the library for your devices.
Bir codec’i silin
Codec’inizi açın ve Sil seçeneğini seçin. Codec listenizden çıkar; onu seçmiş olan cihazlar ve profiller bundan sonra otomatik seçimle çözümleme yapar. Revizyonları saklanır ve kimlik anlamını asla değiştirmez: aynı kimliği yeniden oluşturursanız, silinen codec’in son revizyonuna karşı revizyon kuralına uymak zorundadır.

