====== LoRaWAN: un protocole réseau pour communiquer par radio avec les objets connectés ====== Attention, il faut distinguer [[ LoRa ]] et [[ LoRaWAN ]]. [[ LoRa ]] est un protocole propriétaire de communication radio. [[ LoRaWAN ]] est un protocole de communication réseau couplé à une infrastructure de passerelles (gateways) qui permet à de court messages émis par Radio d'être reçu par des serveurs d'applications sur Internet. La page wikipedia FR est plutôt bien documentée ici, mais elle entremele LoRa et LoRaWAN : [[ https://fr.wikipedia.org/wiki/LoRaWAN | LoRaWAN ]]. ===== LoRaWAN un protocole de communication réseau ===== LoRaWAN est un protocole de communication réseau. * Duty Cycle * "Low SF anti spam" * Class A (baseline), B (beacon) et C (continuous) * ABP vs OTAA : [[ https://www.thethingsnetwork.org/forum/t/what-is-the-difference-between-otaa-and-abp-devices/2723 ]] cf Description des couches du protocoles LoRaWAN : [[ https://www.rfwireless-world.com/Tutorials/LoRa-protocol-stack.html ]] \\ cf Description de la couche MAC : [[ https://www.rfwireless-world.com/Tutorials/LoRaWAN-MAC-layer-inside.html ]] ===== LoRaWAN une infrastructure réseau ===== Des gateways, des serveurs d'applications, ... cf [[ https://www.thethingsnetwork.org/docs/lorawan/ ]] ===== Implémentation du protocole ===== il existe différentes implémentations du protocole LoRaWAN. ==== Protocole de communication entre les gateways et les routers TTN ==== cf [[ https://www.thethingsnetwork.org/docs/gateways/start/connection.html ]] D'après TTN : Semtech à conçu le premier protocole de communication entre les gateways et un backend : le "Semtech UDP protocol". Ce protocole n'est pas sécurisé, ne permet pas de s'assurer de l'identité d'une gateway, ou que le message reçu n'a pas été altéré. Pour palier à ces problèmes, TTN à conçu un nouveau protocole : le "Gateway connector protocol". Néanmoins, vu la simplicité d'utilisation du protocol historique de Semtech, il est assez répandu (toujours d'après TTN). ==== Arduino ==== Pour Arduino, il existe des bibliothèques qui implémente le protocole. * Un portage de la bibliothèque LMIC (LoraMAC-in-C) d'IBM : [[ https://github.com/matthijskooijman/arduino-lmic | Arduino-LMIC ]] * Une adaptation "user friendly" de LMIC : [[ https://github.com/mcci-catena/arduino-lorawan | Arduino-LoRaWAN ]] Toutes les bibliothèques ne supportent pas tous les circuits du marché. Avant d'acheter un circuit compatible LoRaWAN, il faut vérifier qu'il existe une bibliothèque capable de le piloter, ou bien il faudra implémenter un driver pour le circuit. ==== TTN LoRaWAN stack ==== TTN a développé une "stack". C'est un ensemble de services (serveurs) qui sont déployable sur un réseau privés et qui permettent de recevoir, de router, et d'administrer des données provenant de gateway LoRaWAN. cf [[ https://github.com/TheThingsNetwork/lorawan-stack ]] \\ \\ Documentation pour déployer une stack LoRaWAN ttn privé avec docker : [[ https://www.thethingsnetwork.org/article/setting-up-a-private-routing-environment ]] ===== Authentification / Sécurité ===== La communication radio est sujette à différentes menaces. Voici un document édité par trendmicro qui classes les attaques possibles en 5 classes : {{ media_12:radio-communication-threats-trendmicro.jpg?nolink&600 |}} Et voici des contre mesures envisageables : {{ media_12:radio-communication-threats-response-trendmicro.png?nolink&600 |}} * [[ https://lora-alliance.org/sites/default/files/2018-04/lora_alliance_security_whitepaper.pdf ]] Each LoRaWAN device is personalized with a unique 128 bit AES key (called AppKey) and a globally unique identifier (EUI-64-based DevEUI), both of which are used during the device authentication process. Allocation of EUI-64 identifiers require the assignor to have an Organizationally Unique Identifier (OUI) from the IEEE Registration Authority. Similarly, LoRaWAN networks are identified by a 24-bit globally unique identifier assigned by the LoRa Alliance™. * [[ https://www.thethingsnetwork.org/docs/lorawan/security.html ]] * [[ https://www.thethingsnetwork.org/docs/lorawan/address-space.html ]] ===== Synoptique de publication de données d'un émetteur LoRa sur Internet avec TTN ===== Dans l'architecture TTN actuelle, un émetteur LoRa n'a pas accès à Internet. Il envoie un message avec une structure de données spécifiques pour une gateway TTN LoRaWAN. L'émetteur n'utilise pas d'autre protocole de communication supplémentaire. La gateway transmet ensuite ce message à un serveur TTN via Internet qui se charge de le dédupliquer et le router vers une "application". L'application par défaut publie ce message au format json dans le topic dédié d'un broker MQTT de TTN. ===== Technologie ===== * LoRaWAN ADR (Adaptive Data Rate) : [[ https://www.thethingsnetwork.org/docs/lorawan/adr.html ]] ==== TTN workflow ==== * Il faut créer une application sur TTN * Il faut attacher son device à son application * Lorsque la TTN gateway reçoit un message LoRa elle le transmet à TTN, qui le route vers une application en fonction de l'adresse non unique du device dev_aadr et de la MIC qui permet de retrouver de façon unique l'emetteur. * TTN pousse alors par defaut le message au format json dans une file MQTT. ===== Materiel nécéssaire ===== Pour commencer à jouer, on peut utiliser les 2 transceivers sx1276 tel le [[ RAK45 ]]. Néanmoins, pour des raisons de simplicités, et pour pouvoir nous permettre d'offrir un service plus robuste avec plusieurs canaux de communication, il faut disposer d'un concentrateur disposant de 8 canaux : * Le ic880a : [[ https://shop.imst.de/wireless-modules/lora-products/8/ic880a-spi-lorawan-concentrator-868-mhz ]]. Cela semble couté moins de 120€, ce qui ne me parait pas prohibitif. * Le RAK831 : il vaut environ 140€ en chine, c'est un peu plus chèr que le ic880a, il faudrait les comparer. Un super guide de TTN suisse pour construire une gateway LoRaWAN : [[ https://github.com/ttn-zh/ic880a-gateway/wiki ]]. ===== Cayenne Low Power Paylod ===== CayenneLPP est une bibliothèque largement supporté qui permet de transporter des messages avec des tailles les plus réduites possibles. cf [[ https://mydevices.com/cayenne/docs/lora/#lora-cayenne-low-power-payload ]] ===== Ressources ===== La documentation fournit par the TTN est interessante : [[ https://www.thethingsnetwork.org/docs/ | The TTN doc ]]. On y trouve notament le framework Arduino pour envoyer des messages via LoRaWAN en quelques lignes de code : [[ https://www.thethingsnetwork.org/docs/devices/arduino/ | Framework Arduino LoRaWAN ]]. Guides pour construire une gateway LoRaWAN : * [[ https://github.com/ttn-zh/ic880a-gateway ]] * [[ https://www.thethingsnetwork.org/docs/gateways/start/build.html ]] * [[ https://www.rs-online.com/designspark/building-a-raspberry-pi-powered-lorawan-gateway-cn-de-fr ]] * [[ https://frightanic.com/iot/build-a-lorawan-gateway-for-the-things-network/ ]] Liste des gateway LoRaWAN existantes : [[ https://www.thethingsnetwork.org/docs/gateways/start/list.html ]] Code Arduino pour une Single channel LoRaWAN Gateway basé sur un ESP32 : https://github.com/things4u/ESP-1ch-Gateway-v5.0 {{tag>documentation protocole_reseau theorie_fondamentale sans_fil max}}