Die statische Kontext -Header -Komprimierung (SCHC, ausgesprochen Chic) ist ein generischer Komprimierungsmechanismus für LPWAN -Netzwerke. Es ist am IETF standardisiert.
Diese Implementierung gilt SchC auf CoAP/UDP/IPv6 -Header, kann jedoch auf andere Felderstypen erweitert werden.
In diesem Dokument werden die in {{id.toutain-lpwan-ipv6-static-context-hc}} und {{id.toutain-lpwan-coap-static-kontext-hc}} definierte Anwendung von generischen Komprimierungs-/Dekompressionsprozessen beschrieben.
Im Moment wurde die Implementierung nur auf Uplink und Downlink getestet, wobei sie aus dem Gerät (Dev) mit dem LPWAN -Kompressor/Dekompressor (SC) in der Infrastruktur mit einem einfachen COAP -Server, der über dem Schc C/D ausgeführt wird, kommuniziert. Die Geräteimplementierung wird in Python geschrieben. Derzeit verwendet es die Pycom -API für Lora und kann leicht für Sigfox angepasst werden.
Ein COAP/UDP/IPv6 -Paket wird vom Gerät generiert, das Gerät analysiert dieses Paket, um jeden Wert der Headerfelder zu erhalten, und dann sucht das Gerät nach einer Komprimierungsregel, die mit diesem Paketformat übereinstimmt. Wenn im Kontext eine Regel vorhanden ist, die dem Header -Format und den Werten des Pakets übereinstimmt, werden die Headerfelder unter Verwendung der durch diese Regel angegebenen Komprimierung/Dekompressionsaktion (CDA) komprimiert und das komprimierte Paket wird über die Luft an die Infrastruktur C/d gesendet.
Nach Erhalt wird das komprimierte Paket von der Infrastruktur C/D analysiert, um die Regelkennung (erster Byte), jedes nachfolgende Header -Feld (wie in der Regel angegeben) und die Nutzlast abzugrenzen. Schließlich dekomprimiert der LC die Header, wie in der Regel beschrieben. Die CoAP -Nachricht wird dann verarbeitet, und wenn eine Antwort benötigt wird, wird die Antwort komprimiert und an das dekomprimierte Gerät zurückgeschickt.
Zu diesem Zweck wird das Gerät in einem lopy -Modul implementiert, das über LORA übertragen kann und in Mikropropython leicht programmiert werden kann. Die Infrastruktur C/S wird von einem HTTP -Server mit einem Node.js implementiert, der die LPWAN -Nutzlastrahmen für das Rohkomprimieren in einer Post -Nachricht empfängt. Die Antwort ist in der Bestätigung dieser Post -Nachricht enthalten.
Für die Implementierung von Komprimierung und Dekompression sind verschiedene Klassen erforderlich.
Rulemngt.py definiert Rulemanager -Klasse, die den SCHC -Kontext beibehält.
Eine Rulemanager -Instanz wird mit einem Anruf the Rulemanager () erstellt
RM = RuleManager()
Anschließend können Regeln mit der Addrule -Methode hinzugefügt werden:
RM.addRule(rule_coap0)
RM.addRule(rule_coap1)
Die Regel wird oin json mit dem folgenden Format definiert:
rule_coap0 = {"ruleid" : 0,
"content" : [["IPv6.version", 1, "bi", 6, "equal", "not-sent"],
["IPv6.trafficClass", 1, "bi", 0x00, "equal", "not-sent"]] }
Eine Regel besteht aus einer Liste (DictionNary) von zwei Elementen:
RuleId definiert die Regelnummer,
Der Inhalt enthält eine Reihe von Feldbeschreibung, die aus:
Die Methode findRuleFromid (regeld) gibt die Regel, die die RegelID entspricht, zurück.
Die Methode FindRuleFrompkt (Header, Direction) gibt die im erste Argument entsprechende Regel entsprechend der Header -Feldliste zurück. Dieser Wert ergibt sich im Allgemeinen aus einer Paket -Header, die mit dem Klassenparser analysiert wird. Das zweite Argument ist entweder "Up", "DW" oder "BI", geben Sie die Richtung aus der Gerätesicht an.
Wenn beider Methoden keine Regel gefunden wird, wird ein keine zurückgegeben.