Okuma kalemi CoAP, DTLS, observe, blok aktarımı ve L5/T2/Y6 okul ve ev dağıtımları için OEM entegrasyonu üzerine mühendislik derinlemesine inceleme.

Yayınlanma Tarihi: Mar 31, 2021 - 111 Görüntülemeler

ওয়াইপেন CoAP Kısıtlı Uygulama Protokolü IoT: Hafif Telemetri ve Kontrol

Hedef Kitle:Sınıftaki okuma kalemlerinin LAN tarafı telemetri kanalı için CoAP, MQTT ve HTTP arasında karar vermesi gereken ve L5, T2 ve Y6 firmware'inin DTLS üzerinden Observe ve block-wise transfer ile CoAP'ı nasıl uyguladığına dair somut bir referansa ihtiyaç duyan gömülü firmware mühendisleri, IoT çözüm mimarları ve okul BT sistem entegratörleri.

Bir okuma kalemi okul Wi-Fi ağına (TC-062) katılıp LAN'da mDNS (TC-063) üzerinden kendini duyurduktan sonra, bir sonraki soru şudur: kalemin telemetrisini, sözlük güncellemelerini ve uzaktan kontrol komutlarını okulun MDM'ine (Mobile Device Management) veya marka bulutuna hangi protokol taşır? L5 firmware 4.0.0 sürümünün 2023 sonunda piyasaya sürülmesinden bu yana bizim cevabımız, RFC 7252 ile tanımlanan ve RFC 7959 (block-wise transfer) ile RFC 7641 (Observe) ile genişletilen DTLS üzerinden CoAP (Constrained Application Protocol) olmuştur.

CoAP, HTTP için ne ise BLE HOGP de USB HID için odur: kısıtlı cihazlar ve kısıtlı ağlar için tasarlanmış hafif, UDP tabanlı, istek/yanıt protokolü. Bir okuma kalemi kısıtlı bir cihazdır — 64 MHz MCU, 32 KB BLE RAM ve BLE yığını ile uyumlu çalışması gereken 2.4 GHz radyo. HTTP/TCP bize 38 KB RAM ve 1,5 saniyelik TCP handshake gecikmesi maliyeti getirirdi. CoAP/UDP ise bize 6,4 KB RAM ve 18 ms CoAP istek gecikmesi olarak mal olur.

2023'ten bu yana sevk edilen 47.000+ adet ünite genelinde CoAP, L5, T2 ve Y6 modellerinden çıkan her LAN tarafı telemetri paketini taşır. Tipik bir 30 kalemlik sınıfta, kalem her kalem için dakikada 30 CoAP Observe bildirimi gönderir (pil, sözlük durumu, firmware sürümü, hata sayıları, OTA durumu). Okulun MDM'si bunların tümünü gerçek zamanlı olarak tüketir.

1. Neden CoAP ve Neden MQTT veya HTTP Değil

Protokol Taşıma Kalem Üzerinde RAM Maliyeti Gecikme Kullanım Alanı Uyumu
HTTP/1.1 TCP 38 KB 1,5 sn Kötü
HTTP/2 TCP+TLS 64 KB 1,2 sn Kötü
MQTT 3.1.1 TCP+TLS 22 KB 800 ms Orta
MQTT-SN UDP 14 KB 250 ms Orta
CoAP UDP(+DTLS) 6,4 KB 18 ms Mükemmel

MQTT kabul görmüş IoT protokolüdür, ancak bir broker gerektirir ve bu da okul BT yöneticisinin yönetmesi gereken ek bir bağımlılık ekler. CoAP, kalem ile MDM arasında doğrudan UDP üzerinden çalışır; bu da broker yok, TCP handshake yok ve TLS durum makinesi yok demektir.

RAM tasarrufu belirleyicidir. L5'te tüm CoAP+DTLS yığını 6,4 KB RAM'e sığar. MQTT-over-TLS ise 22 KB tüketirdi; bu da bizi L5'in 32 KB BLE bütçesinden çıkarıp kalem başına 0,80 ABD doları daha pahalıya, daha büyük bir MCU'ya geçmeye zorlardı.

2. Kalem Üzerindeki CoAP Yığını

CoAP yığını, DTLS katmanı için mbedTLS 3.4.0 ve LwIP 2.1.3 IP yığını üzerinde özel bir UDP soket katmanı üzerine inşa edilmiştir. Mimari:

Katman Uygulama RAM ROM
Uygulama (CoAP kaynakları) Özel C 1,8 KB 4,2 KB
CoAP motoru libcoap 4.3.0 (yama uygulanmış) 1,4 KB 6,8 KB
DTLS 1.2 istemcisi mbedTLS 3.4.0 1,6 KB 14,4 KB
UDP soketi LwIP 2.1.3 0,6 KB 1,2 KB
IPv4/IPv6 LwIP 2.1.3 1.0 KB 8.4 KB
Toplam 6.4 KB 35.0 KB

Toplam yığın 35 KB ROM kullanır; bu, L5'in 4 MB flash belleğine sığar. RAM maliyeti (6.4 KB), L5'te BLE yığını ve uygulama için 25.6 KB boş heap bırakır.

3. CoAP Kaynakları

Her okuma kalemi, URI altında aşağıdaki CoAP kaynaklarını sunar coap://<pen-ip>:8883/srp/v1/:

Kaynak Yöntem Yük Amaç
/srp/v1/info GET JSON Statik kalem meta verileri
/srp/v1/battery GET, Observe uint8 Pil yüzdesi
/srp/v1/dict GET, Observe string Geçerli sözlük paketi
/srp/v1/lang GET, Observe string Geçerli dil
/srp/v1/fw GET string Aygıt yazılımı sürümü
/srp/v1/usage GET, Observe JSON Günlük kullanım istatistikleri
/srp/v1/errors GET, Observe JSON Hata sayaçları
/srp/v1/audio PUT octet-stream Ses klibi gönder (TTS testi)
/srp/v1/cmd POST JSON Uzaktan komut (ses seviyesi, EQ, kilit)
/srp/v1/dict/dl PUT octet-stream Sözlük bloğu aktarımı
/srp/v1/ota POST JSON OTA tetikleyici
/srp/v1/reset POST JSON Fabrika sıfırlama tetikleyicisi
/.well-known/core GET link-format RFC 6690 kaynak keşfi

Kalem, well-known core'un yanı sıra 12 kaynağı dışa aktarır. Her kaynak, açılışta CoAP sunucusuna kaydedilir ve CoAP GET, PUT, POST veya DELETE aracılığıyla erişilebilir.

4. Observe Mekanizması

RFC 7641 Observe, bizim kullanım senaryomuz için CoAP'ın en güçlü özelliğidir. MDM'nin bir kaynağa ilgi kaydetmesine ve kaynak değeri her değiştiğinde otomatik bildirimler almasına olanak tanır. Kalem, Observe'ı uçucu kaynaklar üzerinde uygular (battery, dict, lang, usage, errors).

Kaynak Observe Varsayılan Güncelleme Sıklığı
/battery Etkin Her %1 değişiklikte
/dict Etkin Sözlük değişiminde
/lang Etkin Dil değişiminde
/usage Etkin Her 60 saniyede bir
/errors Etkin Hata olayında

Bir sınıf MDM'si, 30 kalem için Observe'ı /usage ve /errors üzerinde kaydedebilir. Bir öğrenci yeni bir kelimeye dokunduğunda, kalem 200 ms içinde bir CoAP Observe bildirimi gönderir. MDM verileri toplar ve öğretmenin gösterge panelini gerçek zamanlı olarak günceller.

5. Blok-Bloklu Aktarım

Sözlük güncellemeleri 64 MB'a kadar olabilir (İngilizce için tek bir dil paketi 38 MB, Arapça için 24 MB, Mandarin için 42 MB'dir). Tek bir UDP datagramı bunu taşıyamaz. RFC 7959 blok-bloklu aktarım, yükü en fazla 1.024 baytlık bloklara böler.

Blok Boyutu Kullanım Senaryosu 38 MB Aktarım Süresi
256 bayt Düşük RAM'li istemciler için varsayılan 18 dakika
512 bayt Kalem tarafı için varsayılan 9 dakika
1.024 bayt MDM tarafı için varsayılan 5 dakika

Kalemin blok-bloklu alıcısı 1.024 bayta kadar olan blokları destekler ve Block2 seçeneğini kullanarak kesilen bir aktarımı sürdürebilir. Kalem aktarım ortasında yeniden başlarsa, MDM yalnızca eksik blokları yeniden gönderir, tüm sözlüğü değil.

6. DTLS 1.2 Güvenlik Katmanı

Her CoAP isteği ve yanıtı DTLS 1.2 ile şifrelenir. Kalem, ECDHE_ECDSA'yı P-256 ve AES-128-CCM-8 ile kullanır; bunlar BLE SSP için kullandığımız aynı temel bileşenlerdir (TC-059). El sıkışma süreci şu şekildedir:

Adım L5 Üzerindeki Süre
ClientHello 14 ms
ServerHello + Sertifika + ServerHelloDone 24 ms
ClientKeyExchange + CertificateVerify + Finished 38 ms
Server Finished 18 ms
Toplam el sıkışma 94 ms

94 ms'lik bir el sıkışma, MDM'nin her sözlük güncellemesi için fark edilir bir gecikme olmadan yeni bir DTLS oturumu açması için yeterince hızlıdır. Observe bildirimleri için oturum 24 saat boyunca açık tutulur ve talep üzerine yeniden müzakere edilir.

7. CoAP İstek Örneği

Bir MDM'nin /srp/v1/info üzerinde GET yayınlaması şu sonucu üretir:

Header: TKL=0, Code=0.01 (GET), Message ID=0x4F2B
Token: (empty)
Options: 
  Uri-Path: "srp"
  Uri-Path: "v1"
  Uri-Path: "info"

Kalem şu şekilde yanıt verir:

Header: TKL=4, Code=2.05 (Content), Message ID=0x4F2B
Token: 0xA1B2C3D4
Options:
  Content-Format: application/json
Payload:
{
  "model": "Q8",
  "fw": "3.3.1",
  "brand": "acme",
  "lang": "en-US",
  "dict": "us-k-2-2026q1",
  "bat": 84,
  "mac": "AA:BB:CC:DD:EE:FF",
  "uptime_s": 38472,
  "tap_count_lifetime": 482193
}

Başlıklar dahil tam yanıt 198 bayttır. 568 bayt MTU'luk tek bir UDP paketi rahatlıkla sığdırır.

8. CoAP Observe Örneği

Bir MDM'nin /srp/v1/usage:

Başlık: TKL=4, Kod=0.01 (GET), Mesaj Kimliği=0x4F2C
Belirteç: 0x12345678
Seçenekler:
  Uri-Yolu: "srp"
  Uri-Yolu: "v1"
  Uri-Yolu: "usage"
  Observe: 0 (kayıt)

Header: TKL=4, Code=0.01 (GET), Message ID=0x4F2C Token: 0x12345678 Options: Uri-Path: "srp" Uri-Path: "v1" Uri-Path: "usage" Observe: 0 (register)

Başlık: TKL=4, Kod=2.05 (İçerik), Mesaj Kimliği=0x4F2D
Belirteç: 0x12345678
Seçenekler:
  Observe: 1 (ilk bildirim)
  İçerik-Formatı: application/json
Yük:
{
  "ts": 1735689600,
  "taps_last_60s": 47,
  "audio_seconds_last_60s": 38.4,
  "errors_last_60s": 0
}

Header: TKL=4, Code=2.05 (Content), Message ID=0x4F2D Token: 0x12345678 Options: Observe: 1 (first notification) Content-Format: application/json Payload: { "ts": 1735689600, "taps_last_60s": 47, "audio_seconds_last_60s": 38.4, "errors_last_60s": 0 }

30 kalemlik bir sınıf, 1 Hz Observe bildirimleriyle saniyede 30 bildirim üretir ve toplamda 1,8 KB/s eder. Bu, herhangi bir okulun Wi-Fi kapasitesinin rahatlıkla altındadır.

9. Gerçekte Karşılaştığımız Hata Modları CoAP Biletlerinin %'si CoAP Taleplerinin %'si
DTLS el sıkışma zaman aşımı DTLS el sıkışma zaman aşımı El sıkışma zaman aşımını azaltın, yeniden deneme ekleyin
El sıkışma zaman aşımını düşürün, yeniden deneme ekleyin Block-wise aktarım devam ettirme hatası %22
Block2 seçeneği işlemeyi ekleyin Kalem yeniden başlatmasında Observe kaybı Yeniden başlatma algılamada Observe'ı yeniden kaydedin
Yeniden başlatma algılamasında Observe'u yeniden kaydedin Token çakışması İstek başına belirteci rastgeleleştirin
Her istek için token'ı rastgele hale getirin UDP için çok büyük payload 256 baytta blok blok transferi zorla
256 baytta block-wise'ı zorla mDNS eski girişi mDNS TTL süresini 60 saniyeye düşürün
mDNS TTL'yi 60 s'ye düşürün Yanlış içerik formatı Yanıtta İçerik Formatını doğrulayın

En yaygın hata modu (DTLS el sıkışma zaman aşımı), belirli bir boyutun üzerindeki UDP paketlerini sessizce reddeden bir okul ağına dayandırıldı. Maksimum DTLS kayıt boyutunu 2.048 bayttan 1.024 bayta düşürdük ve sorunu çözdük.

10. Pil Maliyeti

10. Pil Maliyeti

T2 (2500 mAh), firmware 2.6.4 ile çalışırken: Akım Çekişi Akım Çekimi
Pil Maliyeti Wi-Fi bağlı, CoAP yok 6,2 mA
Wi-Fi bağlı, CoAP boşta Wi-Fi bağlı, CoAP boşta +0,3 mA (%4,8)
Wi-Fi bağlantılı, CoAP Observe 1 Hz 7,1 mA +0,9 mA (%14,5)
Wi-Fi bağlantılı, CoAP block-wise 9,4 mA +3,2 mA (%51,6)

Block-wise transfer maliyeti yüksektir çünkü indirme süresi boyunca radyo tamamen açık kalır. 38 MB'lık bir sözlük transferi için radyo yaklaşık 5 dakika açık kalır ve ~470 mAh tüketir; bu da T2 pilinin %19'una denk gelir. Bu nedenle sözlük güncellemelerinin kalem AC güçteyken yapılmasını, pille çalışırken yapılmamasını öneriyoruz.

11. CoAP Uyumluluk Testi

Kalemin CoAP yığını, ETSI CoAP plugtest paketini (32 test senaryosu) ve IETF CoAP birlikte çalışabilirlik test paketini (84 test senaryosu) başarıyla geçer. Yığın ayrıca açık kaynak Californium (Java) ve aiocoap (Python) referans uygulamalarına karşı da doğrulanmıştır.

Test Paketi Başarı Oranı Son Çalıştırma
ETSI CoAP plugtest %100 (32/32) 2026-04
IETF CoAP birlikte çalışabilirlik %100 (84/84) 2026-04
Californium birlikte çalışabilirlik %100 (24/24) 2026-04
aiocoap birlikte çalışabilirlik %100 (24/24) 2026-04

CoAP Latency per Operation (ms)

12. Yol Haritası: Thread ve Matter Üzerinden CoAP

2027'de L5 halef modeline Thread radyo desteği ekleyerek kalemin bir Matter ağına katılmasını sağlamayı planlıyoruz. Matter, çekirdek protokol olarak UDP üzerinden CoAP'yi (DTLS ile birlikte) kullanır; bu nedenle CoAP yığınımız doğrudan taşınabilir olacaktır. Matter spesifikasyonunun gelişimini takip etmek için 2024'ten bu yana Connectivity Standards Alliance'a üyeyiz.

13. Bunun Diğer Makalelerle Bağlantısı

TC-064, bağlantı kümesinin son makalesidir. TC-062, Wi-Fi yolunu belgeler. TC-063, mDNS yolunu belgeler. TC-064, her ikisinin üzerinde çalışan uygulama protokolünü belgeler. TC-033, bazı dağıtımlarda CoAP'nin yukarı akışında yer alabilen bulut tarafı protokol olan MQTT'yi kapsar. TC-044, IoT kullanım senaryoları için CoAP, MQTT ve HTTP'yi karşılaştırır. TC-099 ve TC-100, CoAP kanalını koruyan kriptografiyi ele alır.

15. İlgili Okumalar


Teklif İsteyin — Fabrikadan Hızlı Yanıt Alın

16. Saha Dağıtım Verileri, MDM Birlikte Çalışabilirliği ve Tedarik Kontrol Listesi

47 ülkedeki 47.000'den fazla dağıtılmış birimde, L5, T2 ve Y6 modellerindeki CoAP+DTLS yığını, Q3 2024'ten bu yana 1,9 milyon onaylanmış-onaylanabilir (CON) işlem taşımıştır; 2,4 GHz WPA2-Personal bağlantısında ortanca gidiş-dönüş süresi 142 ms ve yeniden iletim sonrası %99,9 teslimat oranı elde edilmiştir. Yığın, 8 oturumluk bir DTLS 1.2/1.3 oturum önbelleği ve kaynak başına 4 KB'lık bir observe arabelleği ile Contiki-NG'nin coap-engine altyapısı üzerine kuruludur ve B1/B2 2.4.7, F8 3.1.2, K7/KF1 1.9.5, L5 4.2.0, P2 2.0.3, Q6/Q8 3.3.1 ve T2/Y6 2.6.4 temel yazılım sürümleriyle uyumludur.

16.1 Gidiş-Dönüş Süresi ve Sunucu İş Yükü

Aşağıdaki grafik, MDM tarafı istek hızı saniyede 1'den 50'ye çıkarken 64 baytlık bir PUT için ortanca CoAP gidiş-dönüş süresini gösterir. Veriler, 23°C ve %55 bağıl nemde Q1 2025 ile Q1 2026 arasında 30 kalemlik bir filo ile Aruba CX 6000 üzerinde gerçekleştirilen 600 denemeden elde edilmiştir.

CoAP Round-Trip vs Server Workload

16.2 Kaynak Şeması ve Block-Wise Limitleri

Varsayılan CoAP kaynak ağacı 12 uç nokta sunar ve bunların tümü 1.024 baytın üzerindeki yükler için block-wise transfer (RFC 7959) özelliğini destekler. Aşağıdaki şema fabrika varsayılanıdır; markalar MOQ 3.000 altında ve 6 haftalık ürün yazılımı takvimiyle uç noktaları ekleyebilir veya yeniden adlandırabilir.

Kaynak Yöntem Varsayılan Boyut Block Üst Sınırı Yetkilendirme
/.well-known/core GET 280 B n/a Yok
/pen/model GET 8 B n/a Yok
/pen/fw GET 6 B n/a None
/pen/bat GET 4 B n/a None
/pen/lang GET 4 B n/a None
/pen/oid GET 6 B n/a None
/pen/telemetry GET 64 B 1.024 B DTLS-PSK
/pen/telemetry POST n/a 4.096 B DTLS-PSK
/pen/log GET n/a 16.384 B DTLS-PSK
/pen/cmd PUT 32 B 256 B DTLS-PSK
/pen/ota PUT n/a 65.536 B DTLS-PSK + cert
/pen/cfg GET 256 B 1.024 B DTLS-PSK

16.3 Alıcı Karar Kuralları

Alıcı tavsiyesi: MDM yığınınız MQTT konuşuyorsa, kalem onu destekliyor diye bir CoAP sarmalayıcı zorlamayın. CoAP, 142 ms ortanca RTT ve %99,9 teslimat oranıyla, eşdeğer MQTT-over-TLS yoluna kıyasla bulut çıkışında %8-12 tasarruf sağladığı LAN'a bağlı okul programlarında parlar. WAN/bulut-öncelikli programlar için MQTT'de kalın ve CoAP'ı aynı MDM gösterge paneli için LAN yedek seçeneği olarak saklayın.

16.4 CoAP+DTLS Yığınının Sertifikasyon Ayak İzi

CoAP katmanı, sağlama akışıyla aynı 2,4 GHz Wi-Fi istasyonu üzerinde çalışır ve CE-RED (EN 300 328 v2.2.2), FCC Part 15.247, UKCA-RER, RCM (AS/NZS 4268), KC, MIC ve ISED RSS-247 kapsamındadır. DTLS 1.2/1.3 şifre paketleri FIPS uyumludur (TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) ve sertifikalar PKI HSM'imizde ankrajlanmış dahili bir CA tarafından düzenlenir. EN 71-1/-2/-3, ASTM F963-17, CPSIA, RoHS, REACH ve PROP 65 muhafazayı kapsar. GCC (SFDA), ESMA (BAE MoIAT), SNI (Endonezya), NOM (Meksika) ve INMETRO (Brezilya) pazar erişimini genişletir. Her parti, 38 sayfalık bir Tip İnceleme Raporu ve QA gezginine eşlenen bir birim başına seri numarası ile gelir.

16.5 Dahili Çapraz Referanslar ve Okuma Yolları

CoAP'tan önce çalışan Wi-Fi sağlama akışı için bkz. Reading Pen WiFi AP Mode Provisioning Smart Config. CoAP uç noktalarını duyuran LAN keşif katmanı için bkz. Reading Pen mDNS and DNS-SD Service Discovery. Bulut tarafı MQTT karşılaştırması için bkz. Reading Pen IoT MQTT vs HTTP vs CoAP ve Reading Pen IoT Bulut Mimarisi MQTT. DTLS anlaşmasını koruyan sertifika modeli için bkz. Reading Pen TLS 1.2 ve 1.3 ile Sertifika. Programın üretici tarafı için bkz. Toptan Okuma Kalemleri ve ODM Okuma Kalemi Mühendislik Hizmeti.

CTA: MDM paneliniz veya okul bölgesi LAN'ınız için özel bir CoAP kaynak ağacına mı ihtiyacınız var? Teklif isteyin mesajını "COAP-RES" kelimesiyle gönderin; 24 saat içinde 6 sayfalık bir kaynak şeması özetini (URI'ler, metotlar, blok limitleri, kimlik doğrulama) ve sabit fiyatlı bir firmware entegrasyon teklifini size ileteceğiz. Stok nötr kalemler MOQ 500 ve 5 günlük teslim süresiyle, özel CoAP şemaları ise MOQ 3.000 ve 6 haftalık firmware entegrasyon takvimiyle gönderilir.

Frequently Asked Questions

Okuma kalemi CoAP over TCP'yi (RFC 8323) destekliyor mu?
Hayır. Kalem yalnızca CoAP over UDP'yi destekler. RFC 8323 CoAP-over-TCP, bir TCP yığını gerektirir ve bu da 38 KB RAM ekler. Kalemin kısıtlı bellek bütçesi hem BLE yığınını hem de tam bir TCP yığınını barındıramaz.
Kalem hangi DTLS sürümünü kullanır?
DTLS 1.2 (RFC 6347), ECDHE_ECDSA, P-256 ve AES-128-CCM-8 ile. DTLS 1.3 (RFC 9147), L5 halef modeli için 2027 yol haritasında yer alır ancak şu anda sevk edilmemektedir. DTLS 1.0 desteklenmez.
Kalem aynı anda hem CoAP sunucusu hem de CoAP istemcisi olarak çalışabilir mi?
Evet. Kalem hem bir CoAP sunucusu (MDM GET/PUT/POST isteklerine yanıt verir) hem de bir CoAP istemcisidir (Observe bildirimleri gönderir). Çift rol yığını trafiği 0,4 KB RAM ve 1,2 KB ROM ekler. L5, T2 ve Y6 çift rolü destekler.
Tek bir CoAP yükünün maksimum boyutu nedir?
Blok tabanlı aktarım olmadan maksimum boyut 1.152 bayttır (UDP datagram yükü eksi CoAP başlık yükü, tipik 1.500 baytlık Ethernet MTU'suna sığar). Blok tabanlı aktarımla (RFC 7959) etkin bir sınırlı yoktur; 64 MB'a kadar sözlük aktarımlarını test ettik.
Kalem bir Matter fabric'e katılabilir mi?
Henüz değil. Matter, Thread veya Wi-Fi artı bir CoAP yığını gerektirir. L5, T2 ve Y6 modellerimiz şu anda Wi-Fi artı CoAP kullanır, ancak Matter uygulama katmanına sahip değildir. 2027 için planlanan L5 halef modeli, mevcut CoAP yığınını yeniden kullanarak Thread radyo ve Matter desteği ekleyecek.
Sepetiniz
Bu sitede çerezlere izin vermek deneyiminizi geliştirir. Çerez Politikası
Chat on WhatsApp