La compression de l'en-tête de contexte statique (SCHC, prononcé chic) est un mécanisme de compression générique pour les réseaux LPWAN. Il est standardisé à l'IETF.
Cette implémentation applique SCHC aux en-têtes COAP / UDP / IPv6, mais peut être étendu à d'autres types de champs.
Ce document décrit l'application des processus génériques de compression / décompression définis dans {{id.toutain-lpwan-ipv6-static-context-hc}} et {{id.toutain-lpwan-coap-static-context-hc}}.
Pour le moment, l'implémentation n'a été testée que la liaison montante et la liaison descendante, communiquant à partir du périphérique (DEV) au compresseur / décompresseur LPWAN (SC) dans l'infrastructure avec un simple serveur COAP fonctionnant en plus du SCHC C / D. L'implémentation de l'appareil est écrit dans Python. Il utilise actuellement l'API PYCOM pour LORA et peut être facilement adapté pour Sigfox.
Un paquet COAP / UDP / IPv6 est généré par l'appareil, l'appareil analyse ce paquet pour obtenir chaque valeur des champs d'en-tête, puis l'appareil recherche une règle de compression qui correspond à ce format de paquet. S'il existe une règle dans le contexte qui correspond au format d'en-tête et aux valeurs du paquet, les champs d'en-tête sont compressés à l'aide de l'action de compression / décompression (CDA) spécifiée par cette règle et le paquet compressé est envoyé dans l'air à l'infrastructure C / D.
À la réception, le paquet compressé est analysé par l'infrastructure C / D pour délimiter l'identifiant de règle (premier octet), chaque champ d'en-tête ultérieur (comme spécifié par la règle) et la charge utile. Enfin, le LC décompresse les en-têtes, comme décrit dans la règle. Le message COP est ensuite traité et si une réponse est nécessaire, la réponse est compressée et renvoyée à l'appareil qui l'a décompressée.
À cette fin, le dispositif est implémenté sur un module Lopy, qui est capable de transmettre via LORA et peut être facilement programmé dans Micropython. L'infrastructure C / S est implémentée avec un Node.js par un serveur HTTP qui reçoit les cadres de charge utile LPWAN compressés RAW compressé dans un message post. La réponse est incluse dans la reconnaissance de ce message de message.
Différentes classes sont nécessaires pour implémenter la compression et la décompression.
RENERMNGT.PY définit la classe RuleManager qui maintient le contexte SCHC.
Une instance RuleManager est créée avec un appel The RuleManager ()
RM = RuleManager()
Ensuite, des règles peuvent être ajoutées en utilisant la méthode Addrule:
RM.addRule(rule_coap0)
RM.addRule(rule_coap1)
La règle est définie OIn JSON en utilisant le format suivant:
rule_coap0 = {"ruleid" : 0,
"content" : [["IPv6.version", 1, "bi", 6, "equal", "not-sent"],
["IPv6.trafficClass", 1, "bi", 0x00, "equal", "not-sent"]] }
Une règle est composée d'une liste (dictionnary) de deux éléments:
RuleId définit le numéro de règle,
Le contenu contient un tableau de description de champ composé de:
La méthode findruleFromid (duleID) renvoie la règle correspondant à la règleid.
La méthode FindruleFRompkt (en-tête, direction) renvoie la règle correspondant à la liste des champs d'en-tête contenue dans le premier argument. Cette valeur provient généralement d'un en-tête de paquet d'analyse réalisée avec l'analyseur de classe. Le deuxième argument est soit "UP", "DW" ou "BI", indiquant la direction du point de vue de l'appareil.
Pour les deux méthodes, si aucune règle n'est trouvée, un aucun n'est retourné.