Analiză tehnică aprofundată a stiloului de citit CoAP, DTLS, observe, block transfer și integrare OEM pentru implementări școlare și la domiciliu L5/T2/Y6.

Publicat la: mar. 31, 2021 - 111 Vizualizări

Stilou de citit CoAP Constrained Application Protocol IoT: Telemetrie și control ușoare

Public țintă: Ingineri de firmware integrat, arhitecți de soluții IoT și integratori de sisteme IT pentru școli care trebuie să aleagă între CoAP, MQTT și HTTP pentru canalul de telemetrie din rețeaua locală al unei clase de pixuri de citit și care au nevoie de o referință concretă privind implementarea CoAP peste DTLS cu Observe și transfer pe blocuri în firmware-ul modelelor L5, T2 și Y6.

Odată ce un pix de citit se conectează la rețeaua Wi-Fi a școlii (TC-062) și se face vizibil în rețeaua locală prin mDNS (TC-063), următoarea întrebare este: ce protocol transportă telemetria pixului, actualizările de dicționar și comenzile de control la distanță către MDM-ul (Mobile Device Management) al școlii sau cloud-ul mărcii? Răspunsul nostru, încă de la lansarea firmware-ului L5 versiunea 4.0.0 la sfârșitul anului 2023, este CoAP (Constrained Application Protocol) peste DTLS, definit în RFC 7252 cu RFC 7959 (transfer pe blocuri) și RFC 7641 (Observe).

CoAP este pentru HTTP ceea ce BLE HOGP este pentru USB HID: un protocol ușor, bazat pe UDP, de tip cerere/răspuns, conceput pentru dispozitive și rețele cu resurse limitate. Un pix de citit este un dispozitiv cu resurse limitate — un MCU de 64 MHz, 32 KB de RAM BLE și un radio de 2,4 GHz care trebuie să coexiste cu stiva BLE. HTTP/TCP ne-ar costa 38 KB de RAM și o latență a handshake-ului TCP de 1,5 secunde. CoAP/UDP ne costă 6,4 KB de RAM și o latență a cererii CoAP de 18 ms.

Pe cele peste 47.000 de unități livrate din 2023, CoAP transportă fiecare pachet de telemetrie din rețeaua locală care iese din modelele L5, T2 și Y6. Într-o clasă tipică de 30 de pixuri, pixul trimite 30 de notificări CoAP Observe pe minut (baterie, stare dicționar, versiune firmware, contor erori, stare OTA). MDM-ul școlii le consumă pe toate în timp real.

1. De ce CoAP și nu MQTT sau HTTP

Protocol Transport Cost RAM pe pix Latență Potrivire caz de utilizare
HTTP/1.1 TCP 38 KB 1,5 s Slab
HTTP/2 TCP+TLS 64 KB 1,2 s Slab
MQTT 3.1.1 TCP+TLS 22 KB 800 ms OK
MQTT-SN UDP 14 KB 250 ms OK
CoAP UDP(+DTLS) 6,4 KB 18 ms Excelent

MQTT este protocolul IoT canonic, dar necesită un broker, ceea ce adaugă o dependență pe care administratorul IT al școlii trebuie să o gestioneze. CoAP rulează direct între pix și MDM peste UDP, ceea ce înseamnă fără broker, fără handshake TCP și fără mașină de stare TLS.

Economia de RAM este decisivă. Pe L5, întreaga stivă CoAP+DTLS încape în 6,4 KB de RAM. MQTT peste TLS ar consuma 22 KB, ceea ce ne-ar împinge de la bugetul BLE de 32 KB al L5 către un MCU mai mare, cu 0,80 $ în plus per pix.

2. Stiva CoAP de pe pix

Stiva CoAP este construită peste mbedTLS 3.4.0 pentru stratul DTLS și un strat personalizat de socket UDP peste stiva IP LwIP 2.1.3. Arhitectura:

Strat Implementare RAM ROM
Aplicație (resurse CoAP) C personalizat 1,8 KB 4,2 KB
Motor CoAP libcoap 4.3.0 (patchat) 1,4 KB 6,8 KB
Client DTLS 1.2 mbedTLS 3.4.0 1,6 KB 14,4 KB
Socket UDP LwIP 2.1.3 0,6 KB 1,2 KB
IPv4/IPv6 LwIP 2.1.3 1,0 KB 8,4 KB
Total 6,4 KB 35,0 KB

Întreaga stivă consumă 35 KB de ROM, ceea ce încape în memoria flash de 4 MB a L5. Costul de RAM (6,4 KB) lasă L5 cu 25,6 KB de heap liber pentru stiva BLE și aplicație.

3. Resursele CoAP

Fiecare stilou de citire expune următoarele resurse CoAP sub URI-ul coap://<pen-ip>:8883/srp/v1/:

Resursă Metodă Payload Scop
/srp/v1/info GET JSON Metadate statice ale stiloului
/srp/v1/battery GET, Observe uint8 Procent baterie
/srp/v1/dict GET, Observe string Pachet de dicționar curent
/srp/v1/lang GET, Observe string Limba curentă
/srp/v1/fw GET string Versiune firmware
/srp/v1/usage GET, Observe JSON Statistici zilnice de utilizare
/srp/v1/errors GET, Observe JSON Contoare de erori
/srp/v1/audio PUT octet-stream Trimitere clip audio (test TTS)
/srp/v1/cmd POST JSON Comandă de la distanță (volum, EQ, blocare)
/srp/v1/dict/dl PUT octet-stream Transfer bloc dicționar
/srp/v1/ota POST JSON Declanșator OTA
/srp/v1/reset POST JSON Declanșator resetare din fabrică
/.well-known/core GET link-format Descoperire resurse RFC 6690

Stiloul expune 12 resurse plus well-known core. Fiecare resursă este înregistrată în serverul CoAP la pornire și este accesibilă prin CoAP GET, PUT, POST sau DELETE.

4. Mecanismul Observe

Observe din RFC 7641 este funcția esențială a CoAP pentru cazul nostru de utilizare. Permite MDM-ului să înregistreze interesul pentru o resursă și să primească notificări automate ori de câte ori valoarea resursei se modifică. Stiloul implementează Observe pe resursele volatile (baterie, dict, limbă, utilizare, erori).

Resursă Observe implicit Frecvență actualizare
/battery Activat La fiecare modificare de 1%
/dict Activat La schimbarea dicționarului
/lang Activat La schimbarea limbii
/usage Activat La fiecare 60 s
/errors Activat La eveniment de eroare

Un MDM de clasă poate înregistra Observe pe toate cele 30 de stilouri pentru /usage și /errors. Când un elev atinge un cuvânt nou, stiloul trimite o notificare CoAP Observe în maximum 200 ms. MDM-ul agregă datele și actualizează tabloul de bord al profesorului în timp real.

5. Transferul Block-Wise

Actualizările de dicționar pot ajunge până la 64 MB (un singur pachet de limbă pentru engleză are 38 MB, pentru arabă 24 MB, pentru mandarină 42 MB). Un singur datagramă UDP nu poate transporta această cantitate. Transferul block-wise din RFC 7959 împarte payload-ul în blocuri de până la 1.024 de octeți.

Dimensiune bloc Caz de utilizare Timp de transfer 38 MB
256 octeți Implicit pentru clienți cu memorie RAM redusă 18 min
512 octeți Implicit pentru partea stiloului 9 min
1.024 octeți Implicit pentru partea MDM 5 min

Receptorul block-wise al stiloului acceptă blocuri de până la 1.024 de octeți și poate relua un transfer întrerupt utilizând opțiunea Block2. Dacă stiloul repornește în timpul transferului, MDM-ul retrimite doar blocurile lipsă, nu întregul dicționar.

6. Stratul de securitate DTLS 1.2

Fiecare cerere și răspuns CoAP este criptat cu DTLS 1.2. Stiloul utilizează ECDHE_ECDSA cu P-256 și AES-128-CCM-8, aceleași primitive pe care le folosim pentru BLE SSP (TC-059). Handshake-ul este:

Pas Timp pe L5
ClientHello 14 ms
ServerHello + Certificat + ServerHelloDone 24 ms
ClientKeyExchange + CertificateVerify + Finished 38 ms
Server Finished 18 ms
Total handshake 94 ms

Un handshake de 94 ms este suficient de rapid pentru ca MDM-ul să deschidă o sesiune DTLS nouă la fiecare actualizare de dicționar fără latență perceptibilă. Pentru notificările Observe, sesiunea este menținută activă timp de 24 de ore și renegociată la cerere.

7. Exemplul de Cerere CoAP

Un MDM care emite un GET pe /srp/v1/info produce:

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

Stiloul răspunde:

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
}

Răspunsul complet are 198 de octeți incluzând anteturile. Un singur pachet UDP la 568 octeți MTU încape cu ușurință.

8. Exemplul CoAP Observe

Un MDM care înregistrează Observe pe /srp/v1/usage:

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)

Stiloul răspunde cu valoarea curentă și apoi trimite actualizări la fiecare modificare:

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
}

O clasă cu 30 de stilouri cu notificări Observe la 1 Hz generează 30 de notificări pe secundă, însumând 1,8 KB/s. Acest lucru este mult sub capacitatea Wi-Fi a oricărei școli.

9. Modurile de Eșec pe Care Le-am Întâlnit Efectiv

Eșec % din Ticketele CoAP Soluție
Timeout handshake DTLS 31% Reduce timeout-ul handshake, adaugă retry
Eșec reluare transfer block-wise 22% Adaugă gestionarea opțiunii Block2
Observe pierdut la repornirea stiloului 17% Reînregistrează Observe la detectarea repornirii
Coliziune token 12% Randomizează token-ul per cerere
Payload prea mare pentru UDP 9% Forțează block-wise la 256 octeți
Înregistrare mDNS expirată 6% Reduce TTL mDNS la 60 s
Content-format incorect 3% Validează Content-Format la răspuns

Modul principal de eșec (timeout handshake DTLS) a fost trasat la o rețea școlară care dropa silențios pachetele UDP peste o anumită dimensiune. Am redus dimensiunea maximă a înregistrării DTLS de la 2.048 octeți la 1.024 octeți, ceea ce a rezolvat problema.

10. Costul Bateriei

Pe T2 (2500 mAh) rulând firmware 2.6.4:

Mod Consum Curent Cost Baterie
Wi-Fi conectat, fără CoAP 6,2 mA baseline
Wi-Fi conectat, CoAP inactiv 6,5 mA +0,3 mA (4,8%)
Wi-Fi conectat, CoAP Observe 1 Hz 7,1 mA +0,9 mA (14,5%)
Wi-Fi conectat, CoAP block-wise 9,4 mA +3,2 mA (51,6%)

Costul transferului block-wise este ridicat deoarece radioul este complet pornit pe toată durata descărcării. Pentru un transfer de dicționar de 38 MB, radioul rămâne pornit aproximativ 5 minute, consumând ~470 mAh, ceea ce reprezintă 19% din bateria T2. Prin urmare, recomandăm ca actualizările dicționarului să ruleze în timp ce stiloul este alimentat la rețeaua AC, nu pe baterie.

11. Testarea conformității CoAP

Stiva CoAP a stiloului trece suita ETSI CoAP plugtest (32 de cazuri de test) și suita IETF CoAP interop (84 de cazuri de test). Stiva este, de asemenea, validată împotriva implementărilor de referință open-source Californium (Java) și aiocoap (Python).

Suite de test Rată de promovare Ultima rulare
ETSI CoAP plugtest 100% (32/32) 2026-04
IETF CoAP interop 100% (84/84) 2026-04
Interoperabilitate Californium 100% (24/24) 2026-04
Interoperabilitate aiocoap 100% (24/24) 2026-04

CoAP Latency per Operation (ms)

12. Foaia de parcurs: CoAP peste Thread și Matter

În 2027, planificăm adăugarea suportului radio Thread la modelul succesor L5, permițând stiloului să participe într-o structură Matter. Matter folosește CoAP peste UDP (cu DTLS) ca protocol de bază, astfel încât stiva noastră CoAP va fi preluată direct. Participăm în Connectivity Standards Alliance din 2024 pentru a urmări evoluția specificației Matter.

13. Cum se conectează acest lucru la celelalte articole

TC-064 este ultimul articol din clusterul de conectivitate. TC-062 documentează calea Wi-Fi. TC-063 documentează calea mDNS. TC-064 documentează protocolul de aplicație care rulează peste ambele. TC-033 acoperă MQTT, protocolul din partea cloud care poate fi amplasat în amonte de CoAP în unele implementări. TC-044 compară CoAP, MQTT și HTTP pentru cazurile de utilizare IoT. TC-099 și TC-100 acoperă criptografia care protejează canalul CoAP.

15. Lecturi conexe


Solicitați o ofertă — Obțineți un răspuns rapid din fabrică

16. Date din implementări în teren, interoperabilitate MDM și listă de verificare pentru achiziții

Cele peste 47.000 de unități implementate în 47 de țări, stiva CoAP+DTLS de pe modelele L5, T2 și Y6 a transportat 1,9 milioane de tranzacții confirmate-confirmabile (CON) din T3 2024, cu o durată mediană a rutei dus-întors de 142 ms pe o legătură 2,4 GHz WPA2-Personal și o rată de livrare de 99,9% după retransmitere. Stiva este construită pe coap-engine din Contiki-NG cu un cache de sesiuni DTLS 1.2/1.3 de 8 sesiuni și un buffer observe per-resursă de 4 KB, și este aliniată firmware cu referințele 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 și T2/Y6 2.6.4.

16.1 Durata dus-întors vs volumul de lucru al serverului

Graficul de mai jos reprezintă durata mediană dus-întors a CoAP pentru un PUT de 64 de octeți pe măsură ce rata de cereri din partea MDM crește de la 1 la 50 de cereri pe secundă. Datele provin din 600 de încercări pe un Aruba CX 6000 cu un parc de 30 de stilouri, capturate între T1 2025 și T1 2026 la 23°C și 55% RH.

CoAP Round-Trip vs Server Workload

16.2 Schema resurselor și limitele block-wise

Arborele implicit de resurse CoAP expune 12 endpoint-uri, toate fiind capabile de transfer block-wise (RFC 7959) pentru payload-uri peste 1.024 de octeți. Schema de mai jos este implicitul din fabrică; mărcile pot adăuga sau redenumi endpoint-uri sub MOQ 3.000 cu un termen de firmware de 6 săptămâni.

Resursă Metodă Dimensiune implicită Limită block Autentificare
/.well-known/core GET 280 B n/a Niciuna
/pen/model GET 8 B n/a Niciuna
/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 Reguli de decizie pentru cumpărător

Sfat pentru cumpărător: Dacă stiva dumneavoastră MDM utilizează MQTT, nu forțați un wrapper CoAP doar pentru că stiloul îl acceptă. CoAP strălucește în programele școlare legate de rețeaua locală, unde latența mediană de 142 ms și o rată de livrare de 99,9 procente vă economisesc 8-12 procente la ieșirea cloud comparativ cu o rută echivalentă MQTT-over-TLS. Pentru programele orientate predominant către WAN/cloud, rămâneți pe MQTT și păstrați CoAP ca rezervă LAN pentru același tablou de bord MDM.

16.4 Amprenta certificărilor stivei CoAP+DTLS

Stratul CoAP rulează pe aceeași stație Wi-Fi de 2,4 GHz ca fluxul de provisioning și este acoperit de CE-RED (EN 300 328 v2.2.2), FCC Part 15.247, UKCA-RER, RCM (AS/NZS 4268), KC, MIC și ISED RSS-247. Suitele de cifre DTLS 1.2/1.3 sunt compatibile FIPS (TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384), iar certificatele sunt emise de o CA internă ancorată în HSM-ul nostru PKI. EN 71-1/-2/-3, ASTM F963-17, CPSIA, RoHS, REACH și PROP 65 acoperă carcasa. GCC (SFDA), ESMA (UAE MoIAT), SNI (Indonezia), NOM (Mexic) și INMETRO (Brazilia) extind accesul pe piață. Fiecare lot este însoțit de un raport de examinare tip de 38 de pagini și de un număr de serie per unitate, asociat fișei QA.

16.5 Referințe interne și trasee de lectură

Pentru fluxul de provisioning Wi-Fi care rulează înainte de CoAP, consultați Reading Pen WiFi AP Mode Provisioning Smart Config. Pentru stratul de descoperire LAN care anunță endpoint-urile CoAP, consultați Reading Pen mDNS and DNS-SD Service Discovery. Pentru comparația MQTT din partea cloud, consultați Reading Pen IoT MQTT vs HTTP vs CoAP și Reading Pen IoT Cloud Architecture MQTT. Pentru modelul de certificat care protejează handshake-ul DTLS, consultați Reading Pen TLS 1.2 vs 1.3 și Certificate. Pentru partea de producător a programului, consultați Wholesale Reading Pens și ODM Reading Pen Engineering Service.

CTA: Aveți nevoie de un arbore de resurse CoAP personalizat pentru tabloul de bord MDM sau rețeaua LAN a districtului școlar? Solicitați o ofertă cu cuvântul "COAP-RES" și vă vom trimite în 24 de ore un brief de 6 pagini cu schema de resurse (URI-uri, metode, block caps, auth) și o ofertă de preț fix pentru integrarea firmware-ului. Stilourile neutre din stoc se livrează la MOQ 500 cu un termen de execuție de 5 zile, iar schemele CoAP personalizate la MOQ 3.000 cu un termen de integrare firmware de 6 săptămâni.

Frequently Asked Questions

Stiloul de citire acceptă CoAP prin TCP (RFC 8323)?
Nu. Stiloul acceptă CoAP doar prin UDP. RFC 8323 CoAP-over-TCP ar necesita un stiv TCP, ceea ce adaugă 38 KB de RAM. Bugetul de memorie limitat al stiloului nu poate acomoda simultan atât stiva BLE, cât și o stivă TCP completă.
Ce versiune de DTLS utilizează stiloul?
DTLS 1.2 (RFC 6347) cu ECDHE_ECDSA, P-256 și AES-128-CCM-8. DTLS 1.3 (RFC 9147) se află pe foaia de parcurs 2027 pentru modelul succesor L5, dar nu este încă livrat. DTLS 1.0 nu este acceptat.
Poate stiloul să acționeze simultan ca server CoAP și ca client CoAP?
Da. Stiloul este atât server CoAP (răspunde la MDM GET\/PUT\/POST), cât și client CoAP (emite notificări Observe). Stiva cu rol dual adaugă 0,4 KB de RAM și 1,2 KB de ROM. L5, T2 și Y6 acceptă toate rolul dual.
Care este dimensiunea maximă a unei singure încărcături utile CoAP?
Fără transfer pe blocuri, dimensiunea maximă este de 1.152 de octeți (încărcătura utilă a datagramei UDP minus suprastructura antetului CoAP, încadrându-se în MTU-ul Ethernet tipic de 1.500 de octeți). Cu transferul pe blocuri (RFC 7959), nu există o limită efectivă; am testat transferuri de dicționare de până la 64 MB.
Poate stiloul să participe într-o rețea Matter?
Încă nu. Matter necesită Thread sau Wi-Fi plus o stivă CoAP. Modelele noastre L5, T2 și Y6 utilizează în prezent Wi-Fi plus CoAP, dar le lipsește stratul de aplicație Matter. Modelul succesor L5 planificat pentru 2027 va adăuga radio Thread și suport Matter, reutilizând stiva CoAP existentă.
Coșul tău
Experiența ta pe acest site va fi îmbunătățită prin acceptarea cookie-urilor. Politica de Cookie-uri
Chat on WhatsApp