cours - formation lora / lorawan

82
Cours- Formation LoRa / LoRaWAN Version du cours : 4.0 Mars 2019 Sylvain MONTAGNY [email protected] Université Savoie Mont Blanc

Upload: others

Post on 17-Jun-2022

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cours - Formation LoRa / LoRaWAN

Cours - Formation LoRa LoRaWAN

Version du cours 40

Mars 2019

Sylvain MONTAGNY

sylvainmontagnyuniv-smbfr

Universiteacute Savoie Mont Blanc

| 2

Preacutesentation du document

Ce cours sur lrsquointernet des Objets et les protocoles LoRa LoRaWAN est le support drsquoune formation

proposeacutee par lrsquoUniversiteacute de Savoie Mont Blanc (USMB) Elle est reacutealiseacutee

Aux eacutetudiants du Master ESET (Electronique des Systegravemes Embarqueacutes et Teacuteleacutecoms) Site web

de la formation [ wwwmaster-electroniquecom ]

Aux entreprises qui en font la demande (1 ou 2 journeacutees) sylvainmontagnyuniv-smbfr

Ce cours est mis agrave disposition sur internet et est libre drsquoutilisation Toutes personnes

souhaitant apporter des modifications ameacuteliorations corrections peut le faire sur

lrsquoadresse mail sylvainmontagnyuniv-smbfr Lrsquoauteur vous remercie par avance pour

votre contribution

Sigles et Acronymes

LoRa Long Range

LoRaWAN Long Rang Wide Area Network

LPWAN Low Power Wide Area Network

TTN The Things Network

MQTT Message Queuing Telemetry Transport

QoS Quality of Service

HTTP HyperText Transfer Protocol

IoT Internet Of Things

LTE-M Long Term Evolution Cat M1

NB-IoT NarrowBand Internet of Things

FDM Frequency Division Multiplexing

TDM Time Division Multiplexing

CDMA Code Division Multiple Access

RSSI Received Signal Strength Indication

SNR Signal Over Noise Ratio

SF Spreading Factor

CR Coding Rate

CHIRP Compressed High Intensity Radar Pulse

JSON JavaScript Object Notation

SDR Software Digital Radio

| 3

Sommaire 1 LES SYSTEMES EMBARQUES ET LrsquoIOT 6

11 LINTERNET DES OBJETS ( INTERNET OF THINGS IOT ) 6 111 Les systegravemes embarqueacutes dans lrsquoIoT 6 112 Diffeacuterents protocoles dans lrsquoIoT 6 113 Bande de freacutequence utiliseacutees 7

12 MODES DE PARTAGE DU SUPPORT 7 13 NOTION DrsquoETALEMENT DE SPECTRE 8

131 Transmissions successives 8 132 Transmissions simultaneacutees 9 133 Cas du protocole LoRa 9

2 TRANSMISSION RADIO ET PROPAGATION 10

21 LES UNITES ET DEFINITIONS 10 22 ETUDE DE LA DOCUMENTATION DrsquoUN COMPOSANT LORA 11

3 LA COUCHE PHYSIQUE LORA 13

31 LA MODULATION LORA 13 311 La forme du symbole (Chirp) 13 312 Dureacutee drsquoeacutemission drsquoun symbole 15

32 CODING RATE 16 33 UTILISATION DU LORA CALCULATOR 17 34 TIME ON AIR 18 35 MISE EN ŒUVRE LORA EN POINT A POINT 19

351 Utilisation de lrsquoIDE Arduino 19 352 Validation du fonctionnement 20 353 Mise en valeur du Spreading Factor 20

4 LE PROTOCOLE LORAWAN 21

41 STRUCTURE DrsquoUN RESEAU LORAWAN 21 411 Les Devices LoRa 21 412 Les Gateways LoRa 21 413 Le Network Server 22 414 Application Server 22 415 Application Web Serveur 24 416 Authentification avec le Network Server 25 417 Chiffrement des donneacutees vers lrsquoApplication Server 25 418 Combinaison de lrsquoauthentification et du chiffrement 26

42 CLASSES DES DEVICES LORAWAN 26 421 Classe A (All) Minimal power Application 26 422 Classe B (Beacon) Scheduled Receive Slot 27 423 Classe C (Continuous) Continuously Listening 28 424 Quelle Gateway pour les flux Downlink 29

43 ACTIVATION DES DEVICES LORA ET SECURITE 29 431 ABP Activation By Personalization 29 432 OTAA Over The Air Activation 30 433 Seacutecuriteacute 31

44 LA TRAME LORA LORAWAN 32 441 Les couches du protocole LoRaWAN 32 442 Couche Application 33 443 Couche LoRa MAC 34

| 4

444 Couche physique Modulation LoRa 34 445 Canaux et bandes de freacutequences et Data Rate (DR) 35 446 Trame reccedilue et transmise par la Gateway LoRaWAN 36 447 Le format JSON 37

5 MISE EN ŒUVRE DrsquoUN RESEAU LORAWAN 38

51 LES DIFFERENTS TYPES DE RESEAUX 38 511 Les reacuteseaux LoRaWAN opeacutereacutes 38 512 Les reacuteseaux LoRaWAN priveacutes 38 513 Les zones de couvertures 38

52 THE THINGS NETWORK (TTN) 39 521 Preacutesentation de TTN 39 522 Configuration de la Gateway 39 523 Enregistrement des Gateways Appplication et Devices 39 524 Configuration des Devices LoRa 40

53 MISE EN APPLICATION 41 54 ANALYSE DES TRAMES ECHANGEES 41

541 Utilisation de la base 64 41 542 Inteacuterecirct et inconveacutenient de la base 64 43 543 Uplink Du Device LoRa au Network Server 43 544 Uplink Du Network Server agrave lrsquoApplication Server 45 545 Simulation drsquoUplink dans lrsquoApplication Server 46 546 Downlink De lrsquoApplication Server au Device LoRa 46

6 LA RECUPERATION DES DONNEES SUR NOTRE PROPRE APPLICATION 47

61 RECUPERATION DES DONNEES EN HTTP POST DANS LrsquoAPPLICATION 47 611 Preacutesentation du protocole HTTP 47 612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST 48 613 Test du serveur HTTP POST 49 614 Test du client HTTP POST 49 615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST 49 611 Envoyer des donneacutees depuis notre Application avec HTTP POST 51

62 RECUPERATION DES DONNEES AVEC MQTT DANS LrsquoAPPLICATION 52 621 Preacutesentation du protocole MQTT 52 622 Connexion au Broker MQTT 53 623 Qualiteacute de Service au cours dune mecircme connexion 53 624 Qualiteacute de Service apregraves une reconnexion 55 625 Les Topics du protocole MQTT 55 626 Mise en place drsquoun Broker MQTT 56 627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT 57 628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT 57 629 Envoyer des donneacutees depuis notre Application avec MQTT 60

7 CREATION DE NOTRE PROPRE NETWORK ET APPLICATION SERVER 63

711 Objectifs 63 712 Preacutesentation de LoRaServer 63 713 Le laquo Packet Forwarder raquo (Gateway) 64 714 LoRa Gateway Bridge 66 715 LoRa Server (Network Server) 66 716 LoRa App Server (Application Server) 67 717 LoRa Geo Server 67 718 Application 67

72 INSTALLATION DE LORASERVER 67

| 5

721 Mise en place de lrsquoenvironnement 67 722 Installation sur la Raspberry PI 68

71 CONFIGURATION DE LORA SERVER POUR LUPLINK 69 711 Enregistrement drsquoune nouvelle Organisation 69 712 Enregistrement drsquoune instance du Network Server 69 713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) 70 714 Enregistrement des Devices LoRa 71 715 Visualisation des trames reccedilues 72

72 CONFIGURATION DE LORASERVER POUR LINTEGRATION DAPPLICATION 74 721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST 74 722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT 74

8 CREATION DE NOTRE PROPRE APPLICATION 76

81 UTILISATION DE NODE-RED 76 811 Preacutesentation 76 812 Mise en place de lrsquoenvironnement 76 813 Creacuteer une Application speacutecifique pour TTN 77 814 Creacuteation drsquoun Dashboard 79

82 PROGRAMMATION EN PHP 80

9 VERSIONS DU DOCUMENT 82

| 6

1 Les systegravemes embarqueacutes et lrsquoIoT

11 LInternet des Objets ( Internet of Things IoT )

111 Les systegravemes embarqueacutes dans lrsquoIoT Drsquoune faccedilon geacuteneacuterale les systegravemes eacutelectroniques peuvent ecirctre caracteacuteriseacutes par leur consommation

leur puissance de calcul leur taille et leur prix Dans le cas speacutecifique des systegravemes embarqueacutes

utiliseacutes dans lrsquoIoT nous pouvons affecter le poids suivant agrave chacune des caracteacuteristiques

Figure 1 Consommation Puissance Taille et Prix des objets connecteacutes

Compareacutes aux autres systegravemes eacutelectroniques les systegravemes embarqueacutes utiliseacutes dans lrsquoIoT possegravedent

donc

Une faible consommation

Une faible puissance de calcul

Une petite taille

Un prix faible

112 Diffeacuterents protocoles dans lrsquoIoT

Citez les diffeacuterents protocoles que vous connaissez dans le mode de lrsquoIoT (Internet Of

Things) et reportez-les dans le graphique ci-dessous en fonction de leur bande passante

et de leur porteacutee

Figure 2 Protocoles utiliseacutes dans lIoT en fonction du deacutebit et de la porteacutee

Dans lrsquoIoT les protocoles utiliseacutes possegravedent une grande porteacutee et des deacutebits faibles

Lrsquoensemble de ces reacuteseaux sont deacutenommeacutes LPWAN Low Power Wide Area Network

113 Bande de freacutequence utiliseacutees En Europe les bandes de freacutequences libres (sans licence) sont

13 Mhz (RFID) 169 Mhz 434 Mhz 868 Mhz 24Ghz 5 Ghz et 24 Ghz (Faisceau Hertzien) Parmi ces

freacutequences seul le 433 MHz et 868 MHz sont utilisables en LoRa

12 Modes de partage du support Quel que soit le protocole utiliseacute le support de transfert de lrsquoinformation est lrsquoair car tous les

protocoles de lrsquoIoT sont Wireless Le support doit ecirctre partageacute entre tous les utilisateurs de telle

faccedilon que chacun des dispositifs Wireless ne perturbe pas les autres Pour cela une bande de

freacutequence est alloueacutee Par exemple pour la radio FM la bande de freacutequence va de 875 Mhz agrave 108

Mhz

Dans leur bande de freacutequence les dispositifs peuvent se partager le support de diffeacuterentes

maniegraveres

FDM (Frequency Division Multiplexing) Ce mode utilise une partie du spectre (bande de

freacutequence) en permanence Exemple Radio FM

TDM (Time Division Multiplexing) Ce mode utilise tout le spectre (bande de freacutequence) par

intermittence Exemple GSM on a laquo 8 time slots raquo par canal

CDMA (Code Division Multiple Access) Ce mode utilise tout le spectre tout le temps

Porteacutee (Range)

Deacutebit (Bandwidth)

| 8

Les Devices LoRa sont capables drsquoeacutemettre sur un mecircme canal en mecircme temps Le protocole LoRa

utilise une modulation tregraves similaire agrave la meacutethode de partage CDMA (pour autant on ne pourra pas

dire que le LoRa utilise le CDMA) Afin de comprendre la pertinence de ce mode de partage du

support nous allons valider le fonctionnement du mode CDMA dans le prochain paragraphe Plus

tard dans le cours nous expliquerons les diffeacuterences de la modulation LoRa

13 Notion drsquo eacutetalement de spectre utiliseacutee en LoRa Nous allons voir au travers drsquoun exercice comment il est possible drsquoutiliser tout le spectre en

permanence tout en eacutetant capable drsquoeffectuer plusieurs transactions simultaneacutees entre diffeacuterents

eacutemetteursreacutecepteurs Cette meacutethode est souvent appeleacutee laquo eacutetalement de spectre raquo car comme

son nom lrsquoindique elle a pour conseacutequence drsquoeacutetaler le spectre du signal transmis

La meacutethode consiste agrave utiliser des codes qui ont des proprieacuteteacutes matheacutematiques adapteacutees agrave notre

objectif Transmettre en mecircme temps sur la mecircme bande de freacutequence La matrice ci-dessous

donne par exemple 4 codes drsquoeacutetalement (1 par ligne)

Code Orthogonal User 0 1 1 1 1

Code Orthogonal User 1 1 -1 1 -1

Code Orthogonal User 2 1 1 -1 -1

Code Orthogonal User 3 1 -1 -1 1

Tableau 1 Matrice de Hadamart (matheacutematicien) dordre 4

Les proprieacuteteacutes de ces codes (1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1) ne sont pas expliqueacutees ici Nous

nous conterons de veacuterifier leur bon fonctionnement

131 Transmissions successives Chaque tableau ci-dessous repreacutesente une transmission qui est indeacutependante des autres elles ne

se deacuteroulent pas en mecircme temps On veacuterifie qursquoavec la mise en œuvre de laquo lrsquoeacutetalement de spectre raquo

chaque transmission arrive bien agrave destination avec le message qui avait eacuteteacute transmis Le premier

tableau est deacutejagrave rempli en guise drsquoexemple La meacutethode est la suivante

A lrsquoeacutemission

Chaque bit du message est multiplieacute par un code drsquoeacutetalement (une ligne de la matrice)

Le reacutesultat de la multiplication est transmis

A la reacuteception

Chaque symbole reccedilu est multiplieacute par le mecircme code drsquoeacutetalement

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

1 Message User 1 1 0 1 0

2 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3 Symboles transmis User 1 = (1) x (2) 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0

hellip transmission hellip

4 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

5 Deacutecodage = (3) x (4) 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0

6 Message reccedilu (sum (5) nbr_bits) 1 0 1 0

Reacutealiser la transmission du message du User 2 et du User 3 dans les tableaux suivants

| 9

1rsquo Message User 2 0 1 0 1

2rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquo Symboles transmis User 2 = (1rsquo) x (2rsquo) 0 0 0 0

hellip transmission hellip

4rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

5rsquo Deacutecodage = (3rsquo) x (4rsquo) 0 0 0 0

6rsquo Message reccedilu (sum (5rsquo) nbr_bits) 0

1rsquorsquo Message User 3 1 1 0 0

2rsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquo Symboles transmis User 3 = (1rsquorsquo) x (2rsquorsquo) 1 -1 -1 1

hellip transmission hellip

4rsquorsquo Utilisation code orthogonal User3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

5rsquorsquo Deacutecodage = (3rsquorsquo) x (4rsquorsquo) 1 1 1 1

6rsquorsquo Message reccedilu (sum (5rsquorsquo) nbr_bits) 1

132 Transmissions simultaneacutees

Les transmissions se deacuteroulent maintenant simultaneacutement les messages des User 1 User 2 et User

3 sont envoyeacutes en mecircme temps sur la mecircme bande de freacutequence La premiegravere colonne du User 1

est deacutejagrave remplie en guise drsquoexemple La meacutethode est la suivante

Dans lrsquoair

On additionne les symboles transmis par tous les User (1 2 3) ligne 1rsquorsquorsquo

Pour la reacuteception

Chaque symbole reccedilu est multiplieacute par le code drsquoeacutetalement du User

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

Valider le fonctionnement pour la reacuteception des messages

1rsquorsquorsquo sum des symboles transmis ( 3 + 3rsquo + 3rsquorsquo ) 2 -2 0 0

2rsquorsquorsquo Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 1 (sum (3rsquorsquorsquo) nbr_bits) 1

2rsquorsquorsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 -2 0 0

4rsquorsquorsquo Message reccedilu User 2 (sum (3rsquorsquorsquo) nbr_bits) 0

2rsquorsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 3 (sum (3rsquorsquorsquo) nbr_bits) 1

133 Cas du protocole LoRa Le LoRa utilise une meacutethode drsquoeacutetalement de spectre qui nrsquoest pas exactement celle que nous venons

drsquoeacutetudier La finaliteacute est cependant la mecircme Pouvoir transmettre en mecircme temps sur le mecircme

canal Le protocole LoRa utilise sept laquo codes drsquoeacutetalement raquo appeleacutes Spreading Factor [ SF6 SF7 SF8

SF9 SF10 SF11 et SF12 ] qui lui permet drsquoavoir sept transmissions simultaneacutees sur un mecircme canal

| 10

2 Transmission radio et propagation

21 Les uniteacutes et deacutefinitions dB Rapport entre deux puissances Une atteacutenuation est repreacutesenteacutee par un nombre

neacutegatif (-) Un gain est repreacutesenteacute par un nombre positif (+)

Rapport de puissances en dB Rapport de puissance

+ 3 dB Multiplication par 2

- 3 dB Division par 2

0 dB Egaliteacute

+ 10 dB Multiplication par 10

- 10 dB Division par 10

Tableau 2 Comparaison entre les gains en dB et en proportion

dBi Gain theacuteorique drsquoune antenne

dBm Puissance rameneacutee agrave 1mW 0 dBm correspond agrave 1 mW

En reprenant la deacutefinition des dB remplir le tableau suivant

Puissance en dBm Puissance en mW

+ 3 dBm

- 3 dBm

+ 10 dBm

- 10 dBm

Tableau 3 Comparaison entre les puissances en dB et en mW

Le Talkie-Walkie a une puissance drsquoeacutemission de 2W Quelle est la puissance drsquoeacutemission

exprimeacutees en dBm

Sensibiliteacute Puissance minimale qursquoest capable de deacutetecter un reacutecepteur

RSSI Received Signal Strength Indication

SNR Signal over Noise Ratio

Un eacutemetteur transmet agrave une puissance de 13dBm en utilisant une antenne dont le gain

est de 2dBi Les pertes dans lrsquoair sont de 60 dB Lrsquoantenne reacuteceptrice qui possegravede un gain

de 2dBi est relieacutee agrave un reacutecepteur dont la sensibiliteacute est de -80 dBm Le signal pourra-t-il

ecirctre reccedilu

Le link Budget Crsquoest la quantiteacute de puissance que nous pouvons perdre avant drsquoarriver au

reacutecepteur tout en conservant une transmission fonctionnelle Autrement dit crsquoest la

puissance de lrsquoeacutemetteur moins la sensibiliteacute du reacutecepteur Dans lrsquoexemple preacuteceacutedent le

budget que nous avons agrave disposition est de 93dB

| 11

En LoRa nous avons un Link Budget de 157 dB

En LTE (4G) nous avons un Link Budget de 130 dB

Etude de la documentation drsquoun composant LoRa Le RN2483 est le composant radiofreacutequence que nous utiliserons dans notre transmission LoRa

Voici quelques une de ses caracteacuteristiques

Figure 3 Caracteacuteristiques principales du composant radiofreacutequence utiliseacute

Reprenez la deacutefinition du Link Budget et retrouver les 157 dB annonceacute dans cette

documentation

En LoRa plus le code drsquoeacutetalement est grand plus on est capable drsquoeacutemettre dans un milieu bruiteacute La

figure ci-dessous preacutesente les rapports signal sur bruit avec lesquels nous seront capable de reacutealiser

une transmission en fonction des Spreading Factor utiliseacutes

Figure 4 Influence du Spreading Factor sur le SNR acceptable

On remarque que pour un SF8 nous sommes capables drsquoeacutemettre avec un SNR de -10 dB On pourra

transmettre malgreacute le fait que le bruit est 10 fois supeacuterieur au signal

On remarque que pour un SF12 nous sommes capables drsquoeacutemettre avec un SNR de -20 dB On

pourra transmettre malgreacute le fait que le bruit est 100 fois supeacuterieur au signal

| 12

Cependant on remarque aussi que lrsquoutilisation drsquoun Spreading Factor plus eacuteleveacute augmente

consideacuterablement le nombre de symbole eacutemis (2egraveme colonne du tableau) Comme nous le verrons

plus tard cela impactera eacutevidement le temps de transmission

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 2: Cours - Formation LoRa / LoRaWAN

| 2

Preacutesentation du document

Ce cours sur lrsquointernet des Objets et les protocoles LoRa LoRaWAN est le support drsquoune formation

proposeacutee par lrsquoUniversiteacute de Savoie Mont Blanc (USMB) Elle est reacutealiseacutee

Aux eacutetudiants du Master ESET (Electronique des Systegravemes Embarqueacutes et Teacuteleacutecoms) Site web

de la formation [ wwwmaster-electroniquecom ]

Aux entreprises qui en font la demande (1 ou 2 journeacutees) sylvainmontagnyuniv-smbfr

Ce cours est mis agrave disposition sur internet et est libre drsquoutilisation Toutes personnes

souhaitant apporter des modifications ameacuteliorations corrections peut le faire sur

lrsquoadresse mail sylvainmontagnyuniv-smbfr Lrsquoauteur vous remercie par avance pour

votre contribution

Sigles et Acronymes

LoRa Long Range

LoRaWAN Long Rang Wide Area Network

LPWAN Low Power Wide Area Network

TTN The Things Network

MQTT Message Queuing Telemetry Transport

QoS Quality of Service

HTTP HyperText Transfer Protocol

IoT Internet Of Things

LTE-M Long Term Evolution Cat M1

NB-IoT NarrowBand Internet of Things

FDM Frequency Division Multiplexing

TDM Time Division Multiplexing

CDMA Code Division Multiple Access

RSSI Received Signal Strength Indication

SNR Signal Over Noise Ratio

SF Spreading Factor

CR Coding Rate

CHIRP Compressed High Intensity Radar Pulse

JSON JavaScript Object Notation

SDR Software Digital Radio

| 3

Sommaire 1 LES SYSTEMES EMBARQUES ET LrsquoIOT 6

11 LINTERNET DES OBJETS ( INTERNET OF THINGS IOT ) 6 111 Les systegravemes embarqueacutes dans lrsquoIoT 6 112 Diffeacuterents protocoles dans lrsquoIoT 6 113 Bande de freacutequence utiliseacutees 7

12 MODES DE PARTAGE DU SUPPORT 7 13 NOTION DrsquoETALEMENT DE SPECTRE 8

131 Transmissions successives 8 132 Transmissions simultaneacutees 9 133 Cas du protocole LoRa 9

2 TRANSMISSION RADIO ET PROPAGATION 10

21 LES UNITES ET DEFINITIONS 10 22 ETUDE DE LA DOCUMENTATION DrsquoUN COMPOSANT LORA 11

3 LA COUCHE PHYSIQUE LORA 13

31 LA MODULATION LORA 13 311 La forme du symbole (Chirp) 13 312 Dureacutee drsquoeacutemission drsquoun symbole 15

32 CODING RATE 16 33 UTILISATION DU LORA CALCULATOR 17 34 TIME ON AIR 18 35 MISE EN ŒUVRE LORA EN POINT A POINT 19

351 Utilisation de lrsquoIDE Arduino 19 352 Validation du fonctionnement 20 353 Mise en valeur du Spreading Factor 20

4 LE PROTOCOLE LORAWAN 21

41 STRUCTURE DrsquoUN RESEAU LORAWAN 21 411 Les Devices LoRa 21 412 Les Gateways LoRa 21 413 Le Network Server 22 414 Application Server 22 415 Application Web Serveur 24 416 Authentification avec le Network Server 25 417 Chiffrement des donneacutees vers lrsquoApplication Server 25 418 Combinaison de lrsquoauthentification et du chiffrement 26

42 CLASSES DES DEVICES LORAWAN 26 421 Classe A (All) Minimal power Application 26 422 Classe B (Beacon) Scheduled Receive Slot 27 423 Classe C (Continuous) Continuously Listening 28 424 Quelle Gateway pour les flux Downlink 29

43 ACTIVATION DES DEVICES LORA ET SECURITE 29 431 ABP Activation By Personalization 29 432 OTAA Over The Air Activation 30 433 Seacutecuriteacute 31

44 LA TRAME LORA LORAWAN 32 441 Les couches du protocole LoRaWAN 32 442 Couche Application 33 443 Couche LoRa MAC 34

| 4

444 Couche physique Modulation LoRa 34 445 Canaux et bandes de freacutequences et Data Rate (DR) 35 446 Trame reccedilue et transmise par la Gateway LoRaWAN 36 447 Le format JSON 37

5 MISE EN ŒUVRE DrsquoUN RESEAU LORAWAN 38

51 LES DIFFERENTS TYPES DE RESEAUX 38 511 Les reacuteseaux LoRaWAN opeacutereacutes 38 512 Les reacuteseaux LoRaWAN priveacutes 38 513 Les zones de couvertures 38

52 THE THINGS NETWORK (TTN) 39 521 Preacutesentation de TTN 39 522 Configuration de la Gateway 39 523 Enregistrement des Gateways Appplication et Devices 39 524 Configuration des Devices LoRa 40

53 MISE EN APPLICATION 41 54 ANALYSE DES TRAMES ECHANGEES 41

541 Utilisation de la base 64 41 542 Inteacuterecirct et inconveacutenient de la base 64 43 543 Uplink Du Device LoRa au Network Server 43 544 Uplink Du Network Server agrave lrsquoApplication Server 45 545 Simulation drsquoUplink dans lrsquoApplication Server 46 546 Downlink De lrsquoApplication Server au Device LoRa 46

6 LA RECUPERATION DES DONNEES SUR NOTRE PROPRE APPLICATION 47

61 RECUPERATION DES DONNEES EN HTTP POST DANS LrsquoAPPLICATION 47 611 Preacutesentation du protocole HTTP 47 612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST 48 613 Test du serveur HTTP POST 49 614 Test du client HTTP POST 49 615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST 49 611 Envoyer des donneacutees depuis notre Application avec HTTP POST 51

62 RECUPERATION DES DONNEES AVEC MQTT DANS LrsquoAPPLICATION 52 621 Preacutesentation du protocole MQTT 52 622 Connexion au Broker MQTT 53 623 Qualiteacute de Service au cours dune mecircme connexion 53 624 Qualiteacute de Service apregraves une reconnexion 55 625 Les Topics du protocole MQTT 55 626 Mise en place drsquoun Broker MQTT 56 627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT 57 628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT 57 629 Envoyer des donneacutees depuis notre Application avec MQTT 60

7 CREATION DE NOTRE PROPRE NETWORK ET APPLICATION SERVER 63

711 Objectifs 63 712 Preacutesentation de LoRaServer 63 713 Le laquo Packet Forwarder raquo (Gateway) 64 714 LoRa Gateway Bridge 66 715 LoRa Server (Network Server) 66 716 LoRa App Server (Application Server) 67 717 LoRa Geo Server 67 718 Application 67

72 INSTALLATION DE LORASERVER 67

| 5

721 Mise en place de lrsquoenvironnement 67 722 Installation sur la Raspberry PI 68

71 CONFIGURATION DE LORA SERVER POUR LUPLINK 69 711 Enregistrement drsquoune nouvelle Organisation 69 712 Enregistrement drsquoune instance du Network Server 69 713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) 70 714 Enregistrement des Devices LoRa 71 715 Visualisation des trames reccedilues 72

72 CONFIGURATION DE LORASERVER POUR LINTEGRATION DAPPLICATION 74 721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST 74 722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT 74

8 CREATION DE NOTRE PROPRE APPLICATION 76

81 UTILISATION DE NODE-RED 76 811 Preacutesentation 76 812 Mise en place de lrsquoenvironnement 76 813 Creacuteer une Application speacutecifique pour TTN 77 814 Creacuteation drsquoun Dashboard 79

82 PROGRAMMATION EN PHP 80

9 VERSIONS DU DOCUMENT 82

| 6

1 Les systegravemes embarqueacutes et lrsquoIoT

11 LInternet des Objets ( Internet of Things IoT )

111 Les systegravemes embarqueacutes dans lrsquoIoT Drsquoune faccedilon geacuteneacuterale les systegravemes eacutelectroniques peuvent ecirctre caracteacuteriseacutes par leur consommation

leur puissance de calcul leur taille et leur prix Dans le cas speacutecifique des systegravemes embarqueacutes

utiliseacutes dans lrsquoIoT nous pouvons affecter le poids suivant agrave chacune des caracteacuteristiques

Figure 1 Consommation Puissance Taille et Prix des objets connecteacutes

Compareacutes aux autres systegravemes eacutelectroniques les systegravemes embarqueacutes utiliseacutes dans lrsquoIoT possegravedent

donc

Une faible consommation

Une faible puissance de calcul

Une petite taille

Un prix faible

112 Diffeacuterents protocoles dans lrsquoIoT

Citez les diffeacuterents protocoles que vous connaissez dans le mode de lrsquoIoT (Internet Of

Things) et reportez-les dans le graphique ci-dessous en fonction de leur bande passante

et de leur porteacutee

Figure 2 Protocoles utiliseacutes dans lIoT en fonction du deacutebit et de la porteacutee

Dans lrsquoIoT les protocoles utiliseacutes possegravedent une grande porteacutee et des deacutebits faibles

Lrsquoensemble de ces reacuteseaux sont deacutenommeacutes LPWAN Low Power Wide Area Network

113 Bande de freacutequence utiliseacutees En Europe les bandes de freacutequences libres (sans licence) sont

13 Mhz (RFID) 169 Mhz 434 Mhz 868 Mhz 24Ghz 5 Ghz et 24 Ghz (Faisceau Hertzien) Parmi ces

freacutequences seul le 433 MHz et 868 MHz sont utilisables en LoRa

12 Modes de partage du support Quel que soit le protocole utiliseacute le support de transfert de lrsquoinformation est lrsquoair car tous les

protocoles de lrsquoIoT sont Wireless Le support doit ecirctre partageacute entre tous les utilisateurs de telle

faccedilon que chacun des dispositifs Wireless ne perturbe pas les autres Pour cela une bande de

freacutequence est alloueacutee Par exemple pour la radio FM la bande de freacutequence va de 875 Mhz agrave 108

Mhz

Dans leur bande de freacutequence les dispositifs peuvent se partager le support de diffeacuterentes

maniegraveres

FDM (Frequency Division Multiplexing) Ce mode utilise une partie du spectre (bande de

freacutequence) en permanence Exemple Radio FM

TDM (Time Division Multiplexing) Ce mode utilise tout le spectre (bande de freacutequence) par

intermittence Exemple GSM on a laquo 8 time slots raquo par canal

CDMA (Code Division Multiple Access) Ce mode utilise tout le spectre tout le temps

Porteacutee (Range)

Deacutebit (Bandwidth)

| 8

Les Devices LoRa sont capables drsquoeacutemettre sur un mecircme canal en mecircme temps Le protocole LoRa

utilise une modulation tregraves similaire agrave la meacutethode de partage CDMA (pour autant on ne pourra pas

dire que le LoRa utilise le CDMA) Afin de comprendre la pertinence de ce mode de partage du

support nous allons valider le fonctionnement du mode CDMA dans le prochain paragraphe Plus

tard dans le cours nous expliquerons les diffeacuterences de la modulation LoRa

13 Notion drsquo eacutetalement de spectre utiliseacutee en LoRa Nous allons voir au travers drsquoun exercice comment il est possible drsquoutiliser tout le spectre en

permanence tout en eacutetant capable drsquoeffectuer plusieurs transactions simultaneacutees entre diffeacuterents

eacutemetteursreacutecepteurs Cette meacutethode est souvent appeleacutee laquo eacutetalement de spectre raquo car comme

son nom lrsquoindique elle a pour conseacutequence drsquoeacutetaler le spectre du signal transmis

La meacutethode consiste agrave utiliser des codes qui ont des proprieacuteteacutes matheacutematiques adapteacutees agrave notre

objectif Transmettre en mecircme temps sur la mecircme bande de freacutequence La matrice ci-dessous

donne par exemple 4 codes drsquoeacutetalement (1 par ligne)

Code Orthogonal User 0 1 1 1 1

Code Orthogonal User 1 1 -1 1 -1

Code Orthogonal User 2 1 1 -1 -1

Code Orthogonal User 3 1 -1 -1 1

Tableau 1 Matrice de Hadamart (matheacutematicien) dordre 4

Les proprieacuteteacutes de ces codes (1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1) ne sont pas expliqueacutees ici Nous

nous conterons de veacuterifier leur bon fonctionnement

131 Transmissions successives Chaque tableau ci-dessous repreacutesente une transmission qui est indeacutependante des autres elles ne

se deacuteroulent pas en mecircme temps On veacuterifie qursquoavec la mise en œuvre de laquo lrsquoeacutetalement de spectre raquo

chaque transmission arrive bien agrave destination avec le message qui avait eacuteteacute transmis Le premier

tableau est deacutejagrave rempli en guise drsquoexemple La meacutethode est la suivante

A lrsquoeacutemission

Chaque bit du message est multiplieacute par un code drsquoeacutetalement (une ligne de la matrice)

Le reacutesultat de la multiplication est transmis

A la reacuteception

Chaque symbole reccedilu est multiplieacute par le mecircme code drsquoeacutetalement

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

1 Message User 1 1 0 1 0

2 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3 Symboles transmis User 1 = (1) x (2) 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0

hellip transmission hellip

4 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

5 Deacutecodage = (3) x (4) 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0

6 Message reccedilu (sum (5) nbr_bits) 1 0 1 0

Reacutealiser la transmission du message du User 2 et du User 3 dans les tableaux suivants

| 9

1rsquo Message User 2 0 1 0 1

2rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquo Symboles transmis User 2 = (1rsquo) x (2rsquo) 0 0 0 0

hellip transmission hellip

4rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

5rsquo Deacutecodage = (3rsquo) x (4rsquo) 0 0 0 0

6rsquo Message reccedilu (sum (5rsquo) nbr_bits) 0

1rsquorsquo Message User 3 1 1 0 0

2rsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquo Symboles transmis User 3 = (1rsquorsquo) x (2rsquorsquo) 1 -1 -1 1

hellip transmission hellip

4rsquorsquo Utilisation code orthogonal User3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

5rsquorsquo Deacutecodage = (3rsquorsquo) x (4rsquorsquo) 1 1 1 1

6rsquorsquo Message reccedilu (sum (5rsquorsquo) nbr_bits) 1

132 Transmissions simultaneacutees

Les transmissions se deacuteroulent maintenant simultaneacutement les messages des User 1 User 2 et User

3 sont envoyeacutes en mecircme temps sur la mecircme bande de freacutequence La premiegravere colonne du User 1

est deacutejagrave remplie en guise drsquoexemple La meacutethode est la suivante

Dans lrsquoair

On additionne les symboles transmis par tous les User (1 2 3) ligne 1rsquorsquorsquo

Pour la reacuteception

Chaque symbole reccedilu est multiplieacute par le code drsquoeacutetalement du User

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

Valider le fonctionnement pour la reacuteception des messages

1rsquorsquorsquo sum des symboles transmis ( 3 + 3rsquo + 3rsquorsquo ) 2 -2 0 0

2rsquorsquorsquo Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 1 (sum (3rsquorsquorsquo) nbr_bits) 1

2rsquorsquorsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 -2 0 0

4rsquorsquorsquo Message reccedilu User 2 (sum (3rsquorsquorsquo) nbr_bits) 0

2rsquorsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 3 (sum (3rsquorsquorsquo) nbr_bits) 1

133 Cas du protocole LoRa Le LoRa utilise une meacutethode drsquoeacutetalement de spectre qui nrsquoest pas exactement celle que nous venons

drsquoeacutetudier La finaliteacute est cependant la mecircme Pouvoir transmettre en mecircme temps sur le mecircme

canal Le protocole LoRa utilise sept laquo codes drsquoeacutetalement raquo appeleacutes Spreading Factor [ SF6 SF7 SF8

SF9 SF10 SF11 et SF12 ] qui lui permet drsquoavoir sept transmissions simultaneacutees sur un mecircme canal

| 10

2 Transmission radio et propagation

21 Les uniteacutes et deacutefinitions dB Rapport entre deux puissances Une atteacutenuation est repreacutesenteacutee par un nombre

neacutegatif (-) Un gain est repreacutesenteacute par un nombre positif (+)

Rapport de puissances en dB Rapport de puissance

+ 3 dB Multiplication par 2

- 3 dB Division par 2

0 dB Egaliteacute

+ 10 dB Multiplication par 10

- 10 dB Division par 10

Tableau 2 Comparaison entre les gains en dB et en proportion

dBi Gain theacuteorique drsquoune antenne

dBm Puissance rameneacutee agrave 1mW 0 dBm correspond agrave 1 mW

En reprenant la deacutefinition des dB remplir le tableau suivant

Puissance en dBm Puissance en mW

+ 3 dBm

- 3 dBm

+ 10 dBm

- 10 dBm

Tableau 3 Comparaison entre les puissances en dB et en mW

Le Talkie-Walkie a une puissance drsquoeacutemission de 2W Quelle est la puissance drsquoeacutemission

exprimeacutees en dBm

Sensibiliteacute Puissance minimale qursquoest capable de deacutetecter un reacutecepteur

RSSI Received Signal Strength Indication

SNR Signal over Noise Ratio

Un eacutemetteur transmet agrave une puissance de 13dBm en utilisant une antenne dont le gain

est de 2dBi Les pertes dans lrsquoair sont de 60 dB Lrsquoantenne reacuteceptrice qui possegravede un gain

de 2dBi est relieacutee agrave un reacutecepteur dont la sensibiliteacute est de -80 dBm Le signal pourra-t-il

ecirctre reccedilu

Le link Budget Crsquoest la quantiteacute de puissance que nous pouvons perdre avant drsquoarriver au

reacutecepteur tout en conservant une transmission fonctionnelle Autrement dit crsquoest la

puissance de lrsquoeacutemetteur moins la sensibiliteacute du reacutecepteur Dans lrsquoexemple preacuteceacutedent le

budget que nous avons agrave disposition est de 93dB

| 11

En LoRa nous avons un Link Budget de 157 dB

En LTE (4G) nous avons un Link Budget de 130 dB

Etude de la documentation drsquoun composant LoRa Le RN2483 est le composant radiofreacutequence que nous utiliserons dans notre transmission LoRa

Voici quelques une de ses caracteacuteristiques

Figure 3 Caracteacuteristiques principales du composant radiofreacutequence utiliseacute

Reprenez la deacutefinition du Link Budget et retrouver les 157 dB annonceacute dans cette

documentation

En LoRa plus le code drsquoeacutetalement est grand plus on est capable drsquoeacutemettre dans un milieu bruiteacute La

figure ci-dessous preacutesente les rapports signal sur bruit avec lesquels nous seront capable de reacutealiser

une transmission en fonction des Spreading Factor utiliseacutes

Figure 4 Influence du Spreading Factor sur le SNR acceptable

On remarque que pour un SF8 nous sommes capables drsquoeacutemettre avec un SNR de -10 dB On pourra

transmettre malgreacute le fait que le bruit est 10 fois supeacuterieur au signal

On remarque que pour un SF12 nous sommes capables drsquoeacutemettre avec un SNR de -20 dB On

pourra transmettre malgreacute le fait que le bruit est 100 fois supeacuterieur au signal

| 12

Cependant on remarque aussi que lrsquoutilisation drsquoun Spreading Factor plus eacuteleveacute augmente

consideacuterablement le nombre de symbole eacutemis (2egraveme colonne du tableau) Comme nous le verrons

plus tard cela impactera eacutevidement le temps de transmission

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 3: Cours - Formation LoRa / LoRaWAN

| 3

Sommaire 1 LES SYSTEMES EMBARQUES ET LrsquoIOT 6

11 LINTERNET DES OBJETS ( INTERNET OF THINGS IOT ) 6 111 Les systegravemes embarqueacutes dans lrsquoIoT 6 112 Diffeacuterents protocoles dans lrsquoIoT 6 113 Bande de freacutequence utiliseacutees 7

12 MODES DE PARTAGE DU SUPPORT 7 13 NOTION DrsquoETALEMENT DE SPECTRE 8

131 Transmissions successives 8 132 Transmissions simultaneacutees 9 133 Cas du protocole LoRa 9

2 TRANSMISSION RADIO ET PROPAGATION 10

21 LES UNITES ET DEFINITIONS 10 22 ETUDE DE LA DOCUMENTATION DrsquoUN COMPOSANT LORA 11

3 LA COUCHE PHYSIQUE LORA 13

31 LA MODULATION LORA 13 311 La forme du symbole (Chirp) 13 312 Dureacutee drsquoeacutemission drsquoun symbole 15

32 CODING RATE 16 33 UTILISATION DU LORA CALCULATOR 17 34 TIME ON AIR 18 35 MISE EN ŒUVRE LORA EN POINT A POINT 19

351 Utilisation de lrsquoIDE Arduino 19 352 Validation du fonctionnement 20 353 Mise en valeur du Spreading Factor 20

4 LE PROTOCOLE LORAWAN 21

41 STRUCTURE DrsquoUN RESEAU LORAWAN 21 411 Les Devices LoRa 21 412 Les Gateways LoRa 21 413 Le Network Server 22 414 Application Server 22 415 Application Web Serveur 24 416 Authentification avec le Network Server 25 417 Chiffrement des donneacutees vers lrsquoApplication Server 25 418 Combinaison de lrsquoauthentification et du chiffrement 26

42 CLASSES DES DEVICES LORAWAN 26 421 Classe A (All) Minimal power Application 26 422 Classe B (Beacon) Scheduled Receive Slot 27 423 Classe C (Continuous) Continuously Listening 28 424 Quelle Gateway pour les flux Downlink 29

43 ACTIVATION DES DEVICES LORA ET SECURITE 29 431 ABP Activation By Personalization 29 432 OTAA Over The Air Activation 30 433 Seacutecuriteacute 31

44 LA TRAME LORA LORAWAN 32 441 Les couches du protocole LoRaWAN 32 442 Couche Application 33 443 Couche LoRa MAC 34

| 4

444 Couche physique Modulation LoRa 34 445 Canaux et bandes de freacutequences et Data Rate (DR) 35 446 Trame reccedilue et transmise par la Gateway LoRaWAN 36 447 Le format JSON 37

5 MISE EN ŒUVRE DrsquoUN RESEAU LORAWAN 38

51 LES DIFFERENTS TYPES DE RESEAUX 38 511 Les reacuteseaux LoRaWAN opeacutereacutes 38 512 Les reacuteseaux LoRaWAN priveacutes 38 513 Les zones de couvertures 38

52 THE THINGS NETWORK (TTN) 39 521 Preacutesentation de TTN 39 522 Configuration de la Gateway 39 523 Enregistrement des Gateways Appplication et Devices 39 524 Configuration des Devices LoRa 40

53 MISE EN APPLICATION 41 54 ANALYSE DES TRAMES ECHANGEES 41

541 Utilisation de la base 64 41 542 Inteacuterecirct et inconveacutenient de la base 64 43 543 Uplink Du Device LoRa au Network Server 43 544 Uplink Du Network Server agrave lrsquoApplication Server 45 545 Simulation drsquoUplink dans lrsquoApplication Server 46 546 Downlink De lrsquoApplication Server au Device LoRa 46

6 LA RECUPERATION DES DONNEES SUR NOTRE PROPRE APPLICATION 47

61 RECUPERATION DES DONNEES EN HTTP POST DANS LrsquoAPPLICATION 47 611 Preacutesentation du protocole HTTP 47 612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST 48 613 Test du serveur HTTP POST 49 614 Test du client HTTP POST 49 615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST 49 611 Envoyer des donneacutees depuis notre Application avec HTTP POST 51

62 RECUPERATION DES DONNEES AVEC MQTT DANS LrsquoAPPLICATION 52 621 Preacutesentation du protocole MQTT 52 622 Connexion au Broker MQTT 53 623 Qualiteacute de Service au cours dune mecircme connexion 53 624 Qualiteacute de Service apregraves une reconnexion 55 625 Les Topics du protocole MQTT 55 626 Mise en place drsquoun Broker MQTT 56 627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT 57 628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT 57 629 Envoyer des donneacutees depuis notre Application avec MQTT 60

7 CREATION DE NOTRE PROPRE NETWORK ET APPLICATION SERVER 63

711 Objectifs 63 712 Preacutesentation de LoRaServer 63 713 Le laquo Packet Forwarder raquo (Gateway) 64 714 LoRa Gateway Bridge 66 715 LoRa Server (Network Server) 66 716 LoRa App Server (Application Server) 67 717 LoRa Geo Server 67 718 Application 67

72 INSTALLATION DE LORASERVER 67

| 5

721 Mise en place de lrsquoenvironnement 67 722 Installation sur la Raspberry PI 68

71 CONFIGURATION DE LORA SERVER POUR LUPLINK 69 711 Enregistrement drsquoune nouvelle Organisation 69 712 Enregistrement drsquoune instance du Network Server 69 713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) 70 714 Enregistrement des Devices LoRa 71 715 Visualisation des trames reccedilues 72

72 CONFIGURATION DE LORASERVER POUR LINTEGRATION DAPPLICATION 74 721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST 74 722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT 74

8 CREATION DE NOTRE PROPRE APPLICATION 76

81 UTILISATION DE NODE-RED 76 811 Preacutesentation 76 812 Mise en place de lrsquoenvironnement 76 813 Creacuteer une Application speacutecifique pour TTN 77 814 Creacuteation drsquoun Dashboard 79

82 PROGRAMMATION EN PHP 80

9 VERSIONS DU DOCUMENT 82

| 6

1 Les systegravemes embarqueacutes et lrsquoIoT

11 LInternet des Objets ( Internet of Things IoT )

111 Les systegravemes embarqueacutes dans lrsquoIoT Drsquoune faccedilon geacuteneacuterale les systegravemes eacutelectroniques peuvent ecirctre caracteacuteriseacutes par leur consommation

leur puissance de calcul leur taille et leur prix Dans le cas speacutecifique des systegravemes embarqueacutes

utiliseacutes dans lrsquoIoT nous pouvons affecter le poids suivant agrave chacune des caracteacuteristiques

Figure 1 Consommation Puissance Taille et Prix des objets connecteacutes

Compareacutes aux autres systegravemes eacutelectroniques les systegravemes embarqueacutes utiliseacutes dans lrsquoIoT possegravedent

donc

Une faible consommation

Une faible puissance de calcul

Une petite taille

Un prix faible

112 Diffeacuterents protocoles dans lrsquoIoT

Citez les diffeacuterents protocoles que vous connaissez dans le mode de lrsquoIoT (Internet Of

Things) et reportez-les dans le graphique ci-dessous en fonction de leur bande passante

et de leur porteacutee

Figure 2 Protocoles utiliseacutes dans lIoT en fonction du deacutebit et de la porteacutee

Dans lrsquoIoT les protocoles utiliseacutes possegravedent une grande porteacutee et des deacutebits faibles

Lrsquoensemble de ces reacuteseaux sont deacutenommeacutes LPWAN Low Power Wide Area Network

113 Bande de freacutequence utiliseacutees En Europe les bandes de freacutequences libres (sans licence) sont

13 Mhz (RFID) 169 Mhz 434 Mhz 868 Mhz 24Ghz 5 Ghz et 24 Ghz (Faisceau Hertzien) Parmi ces

freacutequences seul le 433 MHz et 868 MHz sont utilisables en LoRa

12 Modes de partage du support Quel que soit le protocole utiliseacute le support de transfert de lrsquoinformation est lrsquoair car tous les

protocoles de lrsquoIoT sont Wireless Le support doit ecirctre partageacute entre tous les utilisateurs de telle

faccedilon que chacun des dispositifs Wireless ne perturbe pas les autres Pour cela une bande de

freacutequence est alloueacutee Par exemple pour la radio FM la bande de freacutequence va de 875 Mhz agrave 108

Mhz

Dans leur bande de freacutequence les dispositifs peuvent se partager le support de diffeacuterentes

maniegraveres

FDM (Frequency Division Multiplexing) Ce mode utilise une partie du spectre (bande de

freacutequence) en permanence Exemple Radio FM

TDM (Time Division Multiplexing) Ce mode utilise tout le spectre (bande de freacutequence) par

intermittence Exemple GSM on a laquo 8 time slots raquo par canal

CDMA (Code Division Multiple Access) Ce mode utilise tout le spectre tout le temps

Porteacutee (Range)

Deacutebit (Bandwidth)

| 8

Les Devices LoRa sont capables drsquoeacutemettre sur un mecircme canal en mecircme temps Le protocole LoRa

utilise une modulation tregraves similaire agrave la meacutethode de partage CDMA (pour autant on ne pourra pas

dire que le LoRa utilise le CDMA) Afin de comprendre la pertinence de ce mode de partage du

support nous allons valider le fonctionnement du mode CDMA dans le prochain paragraphe Plus

tard dans le cours nous expliquerons les diffeacuterences de la modulation LoRa

13 Notion drsquo eacutetalement de spectre utiliseacutee en LoRa Nous allons voir au travers drsquoun exercice comment il est possible drsquoutiliser tout le spectre en

permanence tout en eacutetant capable drsquoeffectuer plusieurs transactions simultaneacutees entre diffeacuterents

eacutemetteursreacutecepteurs Cette meacutethode est souvent appeleacutee laquo eacutetalement de spectre raquo car comme

son nom lrsquoindique elle a pour conseacutequence drsquoeacutetaler le spectre du signal transmis

La meacutethode consiste agrave utiliser des codes qui ont des proprieacuteteacutes matheacutematiques adapteacutees agrave notre

objectif Transmettre en mecircme temps sur la mecircme bande de freacutequence La matrice ci-dessous

donne par exemple 4 codes drsquoeacutetalement (1 par ligne)

Code Orthogonal User 0 1 1 1 1

Code Orthogonal User 1 1 -1 1 -1

Code Orthogonal User 2 1 1 -1 -1

Code Orthogonal User 3 1 -1 -1 1

Tableau 1 Matrice de Hadamart (matheacutematicien) dordre 4

Les proprieacuteteacutes de ces codes (1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1) ne sont pas expliqueacutees ici Nous

nous conterons de veacuterifier leur bon fonctionnement

131 Transmissions successives Chaque tableau ci-dessous repreacutesente une transmission qui est indeacutependante des autres elles ne

se deacuteroulent pas en mecircme temps On veacuterifie qursquoavec la mise en œuvre de laquo lrsquoeacutetalement de spectre raquo

chaque transmission arrive bien agrave destination avec le message qui avait eacuteteacute transmis Le premier

tableau est deacutejagrave rempli en guise drsquoexemple La meacutethode est la suivante

A lrsquoeacutemission

Chaque bit du message est multiplieacute par un code drsquoeacutetalement (une ligne de la matrice)

Le reacutesultat de la multiplication est transmis

A la reacuteception

Chaque symbole reccedilu est multiplieacute par le mecircme code drsquoeacutetalement

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

1 Message User 1 1 0 1 0

2 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3 Symboles transmis User 1 = (1) x (2) 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0

hellip transmission hellip

4 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

5 Deacutecodage = (3) x (4) 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0

6 Message reccedilu (sum (5) nbr_bits) 1 0 1 0

Reacutealiser la transmission du message du User 2 et du User 3 dans les tableaux suivants

| 9

1rsquo Message User 2 0 1 0 1

2rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquo Symboles transmis User 2 = (1rsquo) x (2rsquo) 0 0 0 0

hellip transmission hellip

4rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

5rsquo Deacutecodage = (3rsquo) x (4rsquo) 0 0 0 0

6rsquo Message reccedilu (sum (5rsquo) nbr_bits) 0

1rsquorsquo Message User 3 1 1 0 0

2rsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquo Symboles transmis User 3 = (1rsquorsquo) x (2rsquorsquo) 1 -1 -1 1

hellip transmission hellip

4rsquorsquo Utilisation code orthogonal User3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

5rsquorsquo Deacutecodage = (3rsquorsquo) x (4rsquorsquo) 1 1 1 1

6rsquorsquo Message reccedilu (sum (5rsquorsquo) nbr_bits) 1

132 Transmissions simultaneacutees

Les transmissions se deacuteroulent maintenant simultaneacutement les messages des User 1 User 2 et User

3 sont envoyeacutes en mecircme temps sur la mecircme bande de freacutequence La premiegravere colonne du User 1

est deacutejagrave remplie en guise drsquoexemple La meacutethode est la suivante

Dans lrsquoair

On additionne les symboles transmis par tous les User (1 2 3) ligne 1rsquorsquorsquo

Pour la reacuteception

Chaque symbole reccedilu est multiplieacute par le code drsquoeacutetalement du User

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

Valider le fonctionnement pour la reacuteception des messages

1rsquorsquorsquo sum des symboles transmis ( 3 + 3rsquo + 3rsquorsquo ) 2 -2 0 0

2rsquorsquorsquo Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 1 (sum (3rsquorsquorsquo) nbr_bits) 1

2rsquorsquorsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 -2 0 0

4rsquorsquorsquo Message reccedilu User 2 (sum (3rsquorsquorsquo) nbr_bits) 0

2rsquorsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 3 (sum (3rsquorsquorsquo) nbr_bits) 1

133 Cas du protocole LoRa Le LoRa utilise une meacutethode drsquoeacutetalement de spectre qui nrsquoest pas exactement celle que nous venons

drsquoeacutetudier La finaliteacute est cependant la mecircme Pouvoir transmettre en mecircme temps sur le mecircme

canal Le protocole LoRa utilise sept laquo codes drsquoeacutetalement raquo appeleacutes Spreading Factor [ SF6 SF7 SF8

SF9 SF10 SF11 et SF12 ] qui lui permet drsquoavoir sept transmissions simultaneacutees sur un mecircme canal

| 10

2 Transmission radio et propagation

21 Les uniteacutes et deacutefinitions dB Rapport entre deux puissances Une atteacutenuation est repreacutesenteacutee par un nombre

neacutegatif (-) Un gain est repreacutesenteacute par un nombre positif (+)

Rapport de puissances en dB Rapport de puissance

+ 3 dB Multiplication par 2

- 3 dB Division par 2

0 dB Egaliteacute

+ 10 dB Multiplication par 10

- 10 dB Division par 10

Tableau 2 Comparaison entre les gains en dB et en proportion

dBi Gain theacuteorique drsquoune antenne

dBm Puissance rameneacutee agrave 1mW 0 dBm correspond agrave 1 mW

En reprenant la deacutefinition des dB remplir le tableau suivant

Puissance en dBm Puissance en mW

+ 3 dBm

- 3 dBm

+ 10 dBm

- 10 dBm

Tableau 3 Comparaison entre les puissances en dB et en mW

Le Talkie-Walkie a une puissance drsquoeacutemission de 2W Quelle est la puissance drsquoeacutemission

exprimeacutees en dBm

Sensibiliteacute Puissance minimale qursquoest capable de deacutetecter un reacutecepteur

RSSI Received Signal Strength Indication

SNR Signal over Noise Ratio

Un eacutemetteur transmet agrave une puissance de 13dBm en utilisant une antenne dont le gain

est de 2dBi Les pertes dans lrsquoair sont de 60 dB Lrsquoantenne reacuteceptrice qui possegravede un gain

de 2dBi est relieacutee agrave un reacutecepteur dont la sensibiliteacute est de -80 dBm Le signal pourra-t-il

ecirctre reccedilu

Le link Budget Crsquoest la quantiteacute de puissance que nous pouvons perdre avant drsquoarriver au

reacutecepteur tout en conservant une transmission fonctionnelle Autrement dit crsquoest la

puissance de lrsquoeacutemetteur moins la sensibiliteacute du reacutecepteur Dans lrsquoexemple preacuteceacutedent le

budget que nous avons agrave disposition est de 93dB

| 11

En LoRa nous avons un Link Budget de 157 dB

En LTE (4G) nous avons un Link Budget de 130 dB

Etude de la documentation drsquoun composant LoRa Le RN2483 est le composant radiofreacutequence que nous utiliserons dans notre transmission LoRa

Voici quelques une de ses caracteacuteristiques

Figure 3 Caracteacuteristiques principales du composant radiofreacutequence utiliseacute

Reprenez la deacutefinition du Link Budget et retrouver les 157 dB annonceacute dans cette

documentation

En LoRa plus le code drsquoeacutetalement est grand plus on est capable drsquoeacutemettre dans un milieu bruiteacute La

figure ci-dessous preacutesente les rapports signal sur bruit avec lesquels nous seront capable de reacutealiser

une transmission en fonction des Spreading Factor utiliseacutes

Figure 4 Influence du Spreading Factor sur le SNR acceptable

On remarque que pour un SF8 nous sommes capables drsquoeacutemettre avec un SNR de -10 dB On pourra

transmettre malgreacute le fait que le bruit est 10 fois supeacuterieur au signal

On remarque que pour un SF12 nous sommes capables drsquoeacutemettre avec un SNR de -20 dB On

pourra transmettre malgreacute le fait que le bruit est 100 fois supeacuterieur au signal

| 12

Cependant on remarque aussi que lrsquoutilisation drsquoun Spreading Factor plus eacuteleveacute augmente

consideacuterablement le nombre de symbole eacutemis (2egraveme colonne du tableau) Comme nous le verrons

plus tard cela impactera eacutevidement le temps de transmission

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 4: Cours - Formation LoRa / LoRaWAN

| 4

444 Couche physique Modulation LoRa 34 445 Canaux et bandes de freacutequences et Data Rate (DR) 35 446 Trame reccedilue et transmise par la Gateway LoRaWAN 36 447 Le format JSON 37

5 MISE EN ŒUVRE DrsquoUN RESEAU LORAWAN 38

51 LES DIFFERENTS TYPES DE RESEAUX 38 511 Les reacuteseaux LoRaWAN opeacutereacutes 38 512 Les reacuteseaux LoRaWAN priveacutes 38 513 Les zones de couvertures 38

52 THE THINGS NETWORK (TTN) 39 521 Preacutesentation de TTN 39 522 Configuration de la Gateway 39 523 Enregistrement des Gateways Appplication et Devices 39 524 Configuration des Devices LoRa 40

53 MISE EN APPLICATION 41 54 ANALYSE DES TRAMES ECHANGEES 41

541 Utilisation de la base 64 41 542 Inteacuterecirct et inconveacutenient de la base 64 43 543 Uplink Du Device LoRa au Network Server 43 544 Uplink Du Network Server agrave lrsquoApplication Server 45 545 Simulation drsquoUplink dans lrsquoApplication Server 46 546 Downlink De lrsquoApplication Server au Device LoRa 46

6 LA RECUPERATION DES DONNEES SUR NOTRE PROPRE APPLICATION 47

61 RECUPERATION DES DONNEES EN HTTP POST DANS LrsquoAPPLICATION 47 611 Preacutesentation du protocole HTTP 47 612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST 48 613 Test du serveur HTTP POST 49 614 Test du client HTTP POST 49 615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST 49 611 Envoyer des donneacutees depuis notre Application avec HTTP POST 51

62 RECUPERATION DES DONNEES AVEC MQTT DANS LrsquoAPPLICATION 52 621 Preacutesentation du protocole MQTT 52 622 Connexion au Broker MQTT 53 623 Qualiteacute de Service au cours dune mecircme connexion 53 624 Qualiteacute de Service apregraves une reconnexion 55 625 Les Topics du protocole MQTT 55 626 Mise en place drsquoun Broker MQTT 56 627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT 57 628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT 57 629 Envoyer des donneacutees depuis notre Application avec MQTT 60

7 CREATION DE NOTRE PROPRE NETWORK ET APPLICATION SERVER 63

711 Objectifs 63 712 Preacutesentation de LoRaServer 63 713 Le laquo Packet Forwarder raquo (Gateway) 64 714 LoRa Gateway Bridge 66 715 LoRa Server (Network Server) 66 716 LoRa App Server (Application Server) 67 717 LoRa Geo Server 67 718 Application 67

72 INSTALLATION DE LORASERVER 67

| 5

721 Mise en place de lrsquoenvironnement 67 722 Installation sur la Raspberry PI 68

71 CONFIGURATION DE LORA SERVER POUR LUPLINK 69 711 Enregistrement drsquoune nouvelle Organisation 69 712 Enregistrement drsquoune instance du Network Server 69 713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) 70 714 Enregistrement des Devices LoRa 71 715 Visualisation des trames reccedilues 72

72 CONFIGURATION DE LORASERVER POUR LINTEGRATION DAPPLICATION 74 721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST 74 722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT 74

8 CREATION DE NOTRE PROPRE APPLICATION 76

81 UTILISATION DE NODE-RED 76 811 Preacutesentation 76 812 Mise en place de lrsquoenvironnement 76 813 Creacuteer une Application speacutecifique pour TTN 77 814 Creacuteation drsquoun Dashboard 79

82 PROGRAMMATION EN PHP 80

9 VERSIONS DU DOCUMENT 82

| 6

1 Les systegravemes embarqueacutes et lrsquoIoT

11 LInternet des Objets ( Internet of Things IoT )

111 Les systegravemes embarqueacutes dans lrsquoIoT Drsquoune faccedilon geacuteneacuterale les systegravemes eacutelectroniques peuvent ecirctre caracteacuteriseacutes par leur consommation

leur puissance de calcul leur taille et leur prix Dans le cas speacutecifique des systegravemes embarqueacutes

utiliseacutes dans lrsquoIoT nous pouvons affecter le poids suivant agrave chacune des caracteacuteristiques

Figure 1 Consommation Puissance Taille et Prix des objets connecteacutes

Compareacutes aux autres systegravemes eacutelectroniques les systegravemes embarqueacutes utiliseacutes dans lrsquoIoT possegravedent

donc

Une faible consommation

Une faible puissance de calcul

Une petite taille

Un prix faible

112 Diffeacuterents protocoles dans lrsquoIoT

Citez les diffeacuterents protocoles que vous connaissez dans le mode de lrsquoIoT (Internet Of

Things) et reportez-les dans le graphique ci-dessous en fonction de leur bande passante

et de leur porteacutee

Figure 2 Protocoles utiliseacutes dans lIoT en fonction du deacutebit et de la porteacutee

Dans lrsquoIoT les protocoles utiliseacutes possegravedent une grande porteacutee et des deacutebits faibles

Lrsquoensemble de ces reacuteseaux sont deacutenommeacutes LPWAN Low Power Wide Area Network

113 Bande de freacutequence utiliseacutees En Europe les bandes de freacutequences libres (sans licence) sont

13 Mhz (RFID) 169 Mhz 434 Mhz 868 Mhz 24Ghz 5 Ghz et 24 Ghz (Faisceau Hertzien) Parmi ces

freacutequences seul le 433 MHz et 868 MHz sont utilisables en LoRa

12 Modes de partage du support Quel que soit le protocole utiliseacute le support de transfert de lrsquoinformation est lrsquoair car tous les

protocoles de lrsquoIoT sont Wireless Le support doit ecirctre partageacute entre tous les utilisateurs de telle

faccedilon que chacun des dispositifs Wireless ne perturbe pas les autres Pour cela une bande de

freacutequence est alloueacutee Par exemple pour la radio FM la bande de freacutequence va de 875 Mhz agrave 108

Mhz

Dans leur bande de freacutequence les dispositifs peuvent se partager le support de diffeacuterentes

maniegraveres

FDM (Frequency Division Multiplexing) Ce mode utilise une partie du spectre (bande de

freacutequence) en permanence Exemple Radio FM

TDM (Time Division Multiplexing) Ce mode utilise tout le spectre (bande de freacutequence) par

intermittence Exemple GSM on a laquo 8 time slots raquo par canal

CDMA (Code Division Multiple Access) Ce mode utilise tout le spectre tout le temps

Porteacutee (Range)

Deacutebit (Bandwidth)

| 8

Les Devices LoRa sont capables drsquoeacutemettre sur un mecircme canal en mecircme temps Le protocole LoRa

utilise une modulation tregraves similaire agrave la meacutethode de partage CDMA (pour autant on ne pourra pas

dire que le LoRa utilise le CDMA) Afin de comprendre la pertinence de ce mode de partage du

support nous allons valider le fonctionnement du mode CDMA dans le prochain paragraphe Plus

tard dans le cours nous expliquerons les diffeacuterences de la modulation LoRa

13 Notion drsquo eacutetalement de spectre utiliseacutee en LoRa Nous allons voir au travers drsquoun exercice comment il est possible drsquoutiliser tout le spectre en

permanence tout en eacutetant capable drsquoeffectuer plusieurs transactions simultaneacutees entre diffeacuterents

eacutemetteursreacutecepteurs Cette meacutethode est souvent appeleacutee laquo eacutetalement de spectre raquo car comme

son nom lrsquoindique elle a pour conseacutequence drsquoeacutetaler le spectre du signal transmis

La meacutethode consiste agrave utiliser des codes qui ont des proprieacuteteacutes matheacutematiques adapteacutees agrave notre

objectif Transmettre en mecircme temps sur la mecircme bande de freacutequence La matrice ci-dessous

donne par exemple 4 codes drsquoeacutetalement (1 par ligne)

Code Orthogonal User 0 1 1 1 1

Code Orthogonal User 1 1 -1 1 -1

Code Orthogonal User 2 1 1 -1 -1

Code Orthogonal User 3 1 -1 -1 1

Tableau 1 Matrice de Hadamart (matheacutematicien) dordre 4

Les proprieacuteteacutes de ces codes (1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1) ne sont pas expliqueacutees ici Nous

nous conterons de veacuterifier leur bon fonctionnement

131 Transmissions successives Chaque tableau ci-dessous repreacutesente une transmission qui est indeacutependante des autres elles ne

se deacuteroulent pas en mecircme temps On veacuterifie qursquoavec la mise en œuvre de laquo lrsquoeacutetalement de spectre raquo

chaque transmission arrive bien agrave destination avec le message qui avait eacuteteacute transmis Le premier

tableau est deacutejagrave rempli en guise drsquoexemple La meacutethode est la suivante

A lrsquoeacutemission

Chaque bit du message est multiplieacute par un code drsquoeacutetalement (une ligne de la matrice)

Le reacutesultat de la multiplication est transmis

A la reacuteception

Chaque symbole reccedilu est multiplieacute par le mecircme code drsquoeacutetalement

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

1 Message User 1 1 0 1 0

2 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3 Symboles transmis User 1 = (1) x (2) 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0

hellip transmission hellip

4 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

5 Deacutecodage = (3) x (4) 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0

6 Message reccedilu (sum (5) nbr_bits) 1 0 1 0

Reacutealiser la transmission du message du User 2 et du User 3 dans les tableaux suivants

| 9

1rsquo Message User 2 0 1 0 1

2rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquo Symboles transmis User 2 = (1rsquo) x (2rsquo) 0 0 0 0

hellip transmission hellip

4rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

5rsquo Deacutecodage = (3rsquo) x (4rsquo) 0 0 0 0

6rsquo Message reccedilu (sum (5rsquo) nbr_bits) 0

1rsquorsquo Message User 3 1 1 0 0

2rsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquo Symboles transmis User 3 = (1rsquorsquo) x (2rsquorsquo) 1 -1 -1 1

hellip transmission hellip

4rsquorsquo Utilisation code orthogonal User3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

5rsquorsquo Deacutecodage = (3rsquorsquo) x (4rsquorsquo) 1 1 1 1

6rsquorsquo Message reccedilu (sum (5rsquorsquo) nbr_bits) 1

132 Transmissions simultaneacutees

Les transmissions se deacuteroulent maintenant simultaneacutement les messages des User 1 User 2 et User

3 sont envoyeacutes en mecircme temps sur la mecircme bande de freacutequence La premiegravere colonne du User 1

est deacutejagrave remplie en guise drsquoexemple La meacutethode est la suivante

Dans lrsquoair

On additionne les symboles transmis par tous les User (1 2 3) ligne 1rsquorsquorsquo

Pour la reacuteception

Chaque symbole reccedilu est multiplieacute par le code drsquoeacutetalement du User

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

Valider le fonctionnement pour la reacuteception des messages

1rsquorsquorsquo sum des symboles transmis ( 3 + 3rsquo + 3rsquorsquo ) 2 -2 0 0

2rsquorsquorsquo Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 1 (sum (3rsquorsquorsquo) nbr_bits) 1

2rsquorsquorsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 -2 0 0

4rsquorsquorsquo Message reccedilu User 2 (sum (3rsquorsquorsquo) nbr_bits) 0

2rsquorsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 3 (sum (3rsquorsquorsquo) nbr_bits) 1

133 Cas du protocole LoRa Le LoRa utilise une meacutethode drsquoeacutetalement de spectre qui nrsquoest pas exactement celle que nous venons

drsquoeacutetudier La finaliteacute est cependant la mecircme Pouvoir transmettre en mecircme temps sur le mecircme

canal Le protocole LoRa utilise sept laquo codes drsquoeacutetalement raquo appeleacutes Spreading Factor [ SF6 SF7 SF8

SF9 SF10 SF11 et SF12 ] qui lui permet drsquoavoir sept transmissions simultaneacutees sur un mecircme canal

| 10

2 Transmission radio et propagation

21 Les uniteacutes et deacutefinitions dB Rapport entre deux puissances Une atteacutenuation est repreacutesenteacutee par un nombre

neacutegatif (-) Un gain est repreacutesenteacute par un nombre positif (+)

Rapport de puissances en dB Rapport de puissance

+ 3 dB Multiplication par 2

- 3 dB Division par 2

0 dB Egaliteacute

+ 10 dB Multiplication par 10

- 10 dB Division par 10

Tableau 2 Comparaison entre les gains en dB et en proportion

dBi Gain theacuteorique drsquoune antenne

dBm Puissance rameneacutee agrave 1mW 0 dBm correspond agrave 1 mW

En reprenant la deacutefinition des dB remplir le tableau suivant

Puissance en dBm Puissance en mW

+ 3 dBm

- 3 dBm

+ 10 dBm

- 10 dBm

Tableau 3 Comparaison entre les puissances en dB et en mW

Le Talkie-Walkie a une puissance drsquoeacutemission de 2W Quelle est la puissance drsquoeacutemission

exprimeacutees en dBm

Sensibiliteacute Puissance minimale qursquoest capable de deacutetecter un reacutecepteur

RSSI Received Signal Strength Indication

SNR Signal over Noise Ratio

Un eacutemetteur transmet agrave une puissance de 13dBm en utilisant une antenne dont le gain

est de 2dBi Les pertes dans lrsquoair sont de 60 dB Lrsquoantenne reacuteceptrice qui possegravede un gain

de 2dBi est relieacutee agrave un reacutecepteur dont la sensibiliteacute est de -80 dBm Le signal pourra-t-il

ecirctre reccedilu

Le link Budget Crsquoest la quantiteacute de puissance que nous pouvons perdre avant drsquoarriver au

reacutecepteur tout en conservant une transmission fonctionnelle Autrement dit crsquoest la

puissance de lrsquoeacutemetteur moins la sensibiliteacute du reacutecepteur Dans lrsquoexemple preacuteceacutedent le

budget que nous avons agrave disposition est de 93dB

| 11

En LoRa nous avons un Link Budget de 157 dB

En LTE (4G) nous avons un Link Budget de 130 dB

Etude de la documentation drsquoun composant LoRa Le RN2483 est le composant radiofreacutequence que nous utiliserons dans notre transmission LoRa

Voici quelques une de ses caracteacuteristiques

Figure 3 Caracteacuteristiques principales du composant radiofreacutequence utiliseacute

Reprenez la deacutefinition du Link Budget et retrouver les 157 dB annonceacute dans cette

documentation

En LoRa plus le code drsquoeacutetalement est grand plus on est capable drsquoeacutemettre dans un milieu bruiteacute La

figure ci-dessous preacutesente les rapports signal sur bruit avec lesquels nous seront capable de reacutealiser

une transmission en fonction des Spreading Factor utiliseacutes

Figure 4 Influence du Spreading Factor sur le SNR acceptable

On remarque que pour un SF8 nous sommes capables drsquoeacutemettre avec un SNR de -10 dB On pourra

transmettre malgreacute le fait que le bruit est 10 fois supeacuterieur au signal

On remarque que pour un SF12 nous sommes capables drsquoeacutemettre avec un SNR de -20 dB On

pourra transmettre malgreacute le fait que le bruit est 100 fois supeacuterieur au signal

| 12

Cependant on remarque aussi que lrsquoutilisation drsquoun Spreading Factor plus eacuteleveacute augmente

consideacuterablement le nombre de symbole eacutemis (2egraveme colonne du tableau) Comme nous le verrons

plus tard cela impactera eacutevidement le temps de transmission

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 5: Cours - Formation LoRa / LoRaWAN

| 5

721 Mise en place de lrsquoenvironnement 67 722 Installation sur la Raspberry PI 68

71 CONFIGURATION DE LORA SERVER POUR LUPLINK 69 711 Enregistrement drsquoune nouvelle Organisation 69 712 Enregistrement drsquoune instance du Network Server 69 713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) 70 714 Enregistrement des Devices LoRa 71 715 Visualisation des trames reccedilues 72

72 CONFIGURATION DE LORASERVER POUR LINTEGRATION DAPPLICATION 74 721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST 74 722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT 74

8 CREATION DE NOTRE PROPRE APPLICATION 76

81 UTILISATION DE NODE-RED 76 811 Preacutesentation 76 812 Mise en place de lrsquoenvironnement 76 813 Creacuteer une Application speacutecifique pour TTN 77 814 Creacuteation drsquoun Dashboard 79

82 PROGRAMMATION EN PHP 80

9 VERSIONS DU DOCUMENT 82

| 6

1 Les systegravemes embarqueacutes et lrsquoIoT

11 LInternet des Objets ( Internet of Things IoT )

111 Les systegravemes embarqueacutes dans lrsquoIoT Drsquoune faccedilon geacuteneacuterale les systegravemes eacutelectroniques peuvent ecirctre caracteacuteriseacutes par leur consommation

leur puissance de calcul leur taille et leur prix Dans le cas speacutecifique des systegravemes embarqueacutes

utiliseacutes dans lrsquoIoT nous pouvons affecter le poids suivant agrave chacune des caracteacuteristiques

Figure 1 Consommation Puissance Taille et Prix des objets connecteacutes

Compareacutes aux autres systegravemes eacutelectroniques les systegravemes embarqueacutes utiliseacutes dans lrsquoIoT possegravedent

donc

Une faible consommation

Une faible puissance de calcul

Une petite taille

Un prix faible

112 Diffeacuterents protocoles dans lrsquoIoT

Citez les diffeacuterents protocoles que vous connaissez dans le mode de lrsquoIoT (Internet Of

Things) et reportez-les dans le graphique ci-dessous en fonction de leur bande passante

et de leur porteacutee

Figure 2 Protocoles utiliseacutes dans lIoT en fonction du deacutebit et de la porteacutee

Dans lrsquoIoT les protocoles utiliseacutes possegravedent une grande porteacutee et des deacutebits faibles

Lrsquoensemble de ces reacuteseaux sont deacutenommeacutes LPWAN Low Power Wide Area Network

113 Bande de freacutequence utiliseacutees En Europe les bandes de freacutequences libres (sans licence) sont

13 Mhz (RFID) 169 Mhz 434 Mhz 868 Mhz 24Ghz 5 Ghz et 24 Ghz (Faisceau Hertzien) Parmi ces

freacutequences seul le 433 MHz et 868 MHz sont utilisables en LoRa

12 Modes de partage du support Quel que soit le protocole utiliseacute le support de transfert de lrsquoinformation est lrsquoair car tous les

protocoles de lrsquoIoT sont Wireless Le support doit ecirctre partageacute entre tous les utilisateurs de telle

faccedilon que chacun des dispositifs Wireless ne perturbe pas les autres Pour cela une bande de

freacutequence est alloueacutee Par exemple pour la radio FM la bande de freacutequence va de 875 Mhz agrave 108

Mhz

Dans leur bande de freacutequence les dispositifs peuvent se partager le support de diffeacuterentes

maniegraveres

FDM (Frequency Division Multiplexing) Ce mode utilise une partie du spectre (bande de

freacutequence) en permanence Exemple Radio FM

TDM (Time Division Multiplexing) Ce mode utilise tout le spectre (bande de freacutequence) par

intermittence Exemple GSM on a laquo 8 time slots raquo par canal

CDMA (Code Division Multiple Access) Ce mode utilise tout le spectre tout le temps

Porteacutee (Range)

Deacutebit (Bandwidth)

| 8

Les Devices LoRa sont capables drsquoeacutemettre sur un mecircme canal en mecircme temps Le protocole LoRa

utilise une modulation tregraves similaire agrave la meacutethode de partage CDMA (pour autant on ne pourra pas

dire que le LoRa utilise le CDMA) Afin de comprendre la pertinence de ce mode de partage du

support nous allons valider le fonctionnement du mode CDMA dans le prochain paragraphe Plus

tard dans le cours nous expliquerons les diffeacuterences de la modulation LoRa

13 Notion drsquo eacutetalement de spectre utiliseacutee en LoRa Nous allons voir au travers drsquoun exercice comment il est possible drsquoutiliser tout le spectre en

permanence tout en eacutetant capable drsquoeffectuer plusieurs transactions simultaneacutees entre diffeacuterents

eacutemetteursreacutecepteurs Cette meacutethode est souvent appeleacutee laquo eacutetalement de spectre raquo car comme

son nom lrsquoindique elle a pour conseacutequence drsquoeacutetaler le spectre du signal transmis

La meacutethode consiste agrave utiliser des codes qui ont des proprieacuteteacutes matheacutematiques adapteacutees agrave notre

objectif Transmettre en mecircme temps sur la mecircme bande de freacutequence La matrice ci-dessous

donne par exemple 4 codes drsquoeacutetalement (1 par ligne)

Code Orthogonal User 0 1 1 1 1

Code Orthogonal User 1 1 -1 1 -1

Code Orthogonal User 2 1 1 -1 -1

Code Orthogonal User 3 1 -1 -1 1

Tableau 1 Matrice de Hadamart (matheacutematicien) dordre 4

Les proprieacuteteacutes de ces codes (1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1) ne sont pas expliqueacutees ici Nous

nous conterons de veacuterifier leur bon fonctionnement

131 Transmissions successives Chaque tableau ci-dessous repreacutesente une transmission qui est indeacutependante des autres elles ne

se deacuteroulent pas en mecircme temps On veacuterifie qursquoavec la mise en œuvre de laquo lrsquoeacutetalement de spectre raquo

chaque transmission arrive bien agrave destination avec le message qui avait eacuteteacute transmis Le premier

tableau est deacutejagrave rempli en guise drsquoexemple La meacutethode est la suivante

A lrsquoeacutemission

Chaque bit du message est multiplieacute par un code drsquoeacutetalement (une ligne de la matrice)

Le reacutesultat de la multiplication est transmis

A la reacuteception

Chaque symbole reccedilu est multiplieacute par le mecircme code drsquoeacutetalement

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

1 Message User 1 1 0 1 0

2 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3 Symboles transmis User 1 = (1) x (2) 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0

hellip transmission hellip

4 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

5 Deacutecodage = (3) x (4) 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0

6 Message reccedilu (sum (5) nbr_bits) 1 0 1 0

Reacutealiser la transmission du message du User 2 et du User 3 dans les tableaux suivants

| 9

1rsquo Message User 2 0 1 0 1

2rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquo Symboles transmis User 2 = (1rsquo) x (2rsquo) 0 0 0 0

hellip transmission hellip

4rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

5rsquo Deacutecodage = (3rsquo) x (4rsquo) 0 0 0 0

6rsquo Message reccedilu (sum (5rsquo) nbr_bits) 0

1rsquorsquo Message User 3 1 1 0 0

2rsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquo Symboles transmis User 3 = (1rsquorsquo) x (2rsquorsquo) 1 -1 -1 1

hellip transmission hellip

4rsquorsquo Utilisation code orthogonal User3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

5rsquorsquo Deacutecodage = (3rsquorsquo) x (4rsquorsquo) 1 1 1 1

6rsquorsquo Message reccedilu (sum (5rsquorsquo) nbr_bits) 1

132 Transmissions simultaneacutees

Les transmissions se deacuteroulent maintenant simultaneacutement les messages des User 1 User 2 et User

3 sont envoyeacutes en mecircme temps sur la mecircme bande de freacutequence La premiegravere colonne du User 1

est deacutejagrave remplie en guise drsquoexemple La meacutethode est la suivante

Dans lrsquoair

On additionne les symboles transmis par tous les User (1 2 3) ligne 1rsquorsquorsquo

Pour la reacuteception

Chaque symbole reccedilu est multiplieacute par le code drsquoeacutetalement du User

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

Valider le fonctionnement pour la reacuteception des messages

1rsquorsquorsquo sum des symboles transmis ( 3 + 3rsquo + 3rsquorsquo ) 2 -2 0 0

2rsquorsquorsquo Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 1 (sum (3rsquorsquorsquo) nbr_bits) 1

2rsquorsquorsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 -2 0 0

4rsquorsquorsquo Message reccedilu User 2 (sum (3rsquorsquorsquo) nbr_bits) 0

2rsquorsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 3 (sum (3rsquorsquorsquo) nbr_bits) 1

133 Cas du protocole LoRa Le LoRa utilise une meacutethode drsquoeacutetalement de spectre qui nrsquoest pas exactement celle que nous venons

drsquoeacutetudier La finaliteacute est cependant la mecircme Pouvoir transmettre en mecircme temps sur le mecircme

canal Le protocole LoRa utilise sept laquo codes drsquoeacutetalement raquo appeleacutes Spreading Factor [ SF6 SF7 SF8

SF9 SF10 SF11 et SF12 ] qui lui permet drsquoavoir sept transmissions simultaneacutees sur un mecircme canal

| 10

2 Transmission radio et propagation

21 Les uniteacutes et deacutefinitions dB Rapport entre deux puissances Une atteacutenuation est repreacutesenteacutee par un nombre

neacutegatif (-) Un gain est repreacutesenteacute par un nombre positif (+)

Rapport de puissances en dB Rapport de puissance

+ 3 dB Multiplication par 2

- 3 dB Division par 2

0 dB Egaliteacute

+ 10 dB Multiplication par 10

- 10 dB Division par 10

Tableau 2 Comparaison entre les gains en dB et en proportion

dBi Gain theacuteorique drsquoune antenne

dBm Puissance rameneacutee agrave 1mW 0 dBm correspond agrave 1 mW

En reprenant la deacutefinition des dB remplir le tableau suivant

Puissance en dBm Puissance en mW

+ 3 dBm

- 3 dBm

+ 10 dBm

- 10 dBm

Tableau 3 Comparaison entre les puissances en dB et en mW

Le Talkie-Walkie a une puissance drsquoeacutemission de 2W Quelle est la puissance drsquoeacutemission

exprimeacutees en dBm

Sensibiliteacute Puissance minimale qursquoest capable de deacutetecter un reacutecepteur

RSSI Received Signal Strength Indication

SNR Signal over Noise Ratio

Un eacutemetteur transmet agrave une puissance de 13dBm en utilisant une antenne dont le gain

est de 2dBi Les pertes dans lrsquoair sont de 60 dB Lrsquoantenne reacuteceptrice qui possegravede un gain

de 2dBi est relieacutee agrave un reacutecepteur dont la sensibiliteacute est de -80 dBm Le signal pourra-t-il

ecirctre reccedilu

Le link Budget Crsquoest la quantiteacute de puissance que nous pouvons perdre avant drsquoarriver au

reacutecepteur tout en conservant une transmission fonctionnelle Autrement dit crsquoest la

puissance de lrsquoeacutemetteur moins la sensibiliteacute du reacutecepteur Dans lrsquoexemple preacuteceacutedent le

budget que nous avons agrave disposition est de 93dB

| 11

En LoRa nous avons un Link Budget de 157 dB

En LTE (4G) nous avons un Link Budget de 130 dB

Etude de la documentation drsquoun composant LoRa Le RN2483 est le composant radiofreacutequence que nous utiliserons dans notre transmission LoRa

Voici quelques une de ses caracteacuteristiques

Figure 3 Caracteacuteristiques principales du composant radiofreacutequence utiliseacute

Reprenez la deacutefinition du Link Budget et retrouver les 157 dB annonceacute dans cette

documentation

En LoRa plus le code drsquoeacutetalement est grand plus on est capable drsquoeacutemettre dans un milieu bruiteacute La

figure ci-dessous preacutesente les rapports signal sur bruit avec lesquels nous seront capable de reacutealiser

une transmission en fonction des Spreading Factor utiliseacutes

Figure 4 Influence du Spreading Factor sur le SNR acceptable

On remarque que pour un SF8 nous sommes capables drsquoeacutemettre avec un SNR de -10 dB On pourra

transmettre malgreacute le fait que le bruit est 10 fois supeacuterieur au signal

On remarque que pour un SF12 nous sommes capables drsquoeacutemettre avec un SNR de -20 dB On

pourra transmettre malgreacute le fait que le bruit est 100 fois supeacuterieur au signal

| 12

Cependant on remarque aussi que lrsquoutilisation drsquoun Spreading Factor plus eacuteleveacute augmente

consideacuterablement le nombre de symbole eacutemis (2egraveme colonne du tableau) Comme nous le verrons

plus tard cela impactera eacutevidement le temps de transmission

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 6: Cours - Formation LoRa / LoRaWAN

| 6

1 Les systegravemes embarqueacutes et lrsquoIoT

11 LInternet des Objets ( Internet of Things IoT )

111 Les systegravemes embarqueacutes dans lrsquoIoT Drsquoune faccedilon geacuteneacuterale les systegravemes eacutelectroniques peuvent ecirctre caracteacuteriseacutes par leur consommation

leur puissance de calcul leur taille et leur prix Dans le cas speacutecifique des systegravemes embarqueacutes

utiliseacutes dans lrsquoIoT nous pouvons affecter le poids suivant agrave chacune des caracteacuteristiques

Figure 1 Consommation Puissance Taille et Prix des objets connecteacutes

Compareacutes aux autres systegravemes eacutelectroniques les systegravemes embarqueacutes utiliseacutes dans lrsquoIoT possegravedent

donc

Une faible consommation

Une faible puissance de calcul

Une petite taille

Un prix faible

112 Diffeacuterents protocoles dans lrsquoIoT

Citez les diffeacuterents protocoles que vous connaissez dans le mode de lrsquoIoT (Internet Of

Things) et reportez-les dans le graphique ci-dessous en fonction de leur bande passante

et de leur porteacutee

Figure 2 Protocoles utiliseacutes dans lIoT en fonction du deacutebit et de la porteacutee

Dans lrsquoIoT les protocoles utiliseacutes possegravedent une grande porteacutee et des deacutebits faibles

Lrsquoensemble de ces reacuteseaux sont deacutenommeacutes LPWAN Low Power Wide Area Network

113 Bande de freacutequence utiliseacutees En Europe les bandes de freacutequences libres (sans licence) sont

13 Mhz (RFID) 169 Mhz 434 Mhz 868 Mhz 24Ghz 5 Ghz et 24 Ghz (Faisceau Hertzien) Parmi ces

freacutequences seul le 433 MHz et 868 MHz sont utilisables en LoRa

12 Modes de partage du support Quel que soit le protocole utiliseacute le support de transfert de lrsquoinformation est lrsquoair car tous les

protocoles de lrsquoIoT sont Wireless Le support doit ecirctre partageacute entre tous les utilisateurs de telle

faccedilon que chacun des dispositifs Wireless ne perturbe pas les autres Pour cela une bande de

freacutequence est alloueacutee Par exemple pour la radio FM la bande de freacutequence va de 875 Mhz agrave 108

Mhz

Dans leur bande de freacutequence les dispositifs peuvent se partager le support de diffeacuterentes

maniegraveres

FDM (Frequency Division Multiplexing) Ce mode utilise une partie du spectre (bande de

freacutequence) en permanence Exemple Radio FM

TDM (Time Division Multiplexing) Ce mode utilise tout le spectre (bande de freacutequence) par

intermittence Exemple GSM on a laquo 8 time slots raquo par canal

CDMA (Code Division Multiple Access) Ce mode utilise tout le spectre tout le temps

Porteacutee (Range)

Deacutebit (Bandwidth)

| 8

Les Devices LoRa sont capables drsquoeacutemettre sur un mecircme canal en mecircme temps Le protocole LoRa

utilise une modulation tregraves similaire agrave la meacutethode de partage CDMA (pour autant on ne pourra pas

dire que le LoRa utilise le CDMA) Afin de comprendre la pertinence de ce mode de partage du

support nous allons valider le fonctionnement du mode CDMA dans le prochain paragraphe Plus

tard dans le cours nous expliquerons les diffeacuterences de la modulation LoRa

13 Notion drsquo eacutetalement de spectre utiliseacutee en LoRa Nous allons voir au travers drsquoun exercice comment il est possible drsquoutiliser tout le spectre en

permanence tout en eacutetant capable drsquoeffectuer plusieurs transactions simultaneacutees entre diffeacuterents

eacutemetteursreacutecepteurs Cette meacutethode est souvent appeleacutee laquo eacutetalement de spectre raquo car comme

son nom lrsquoindique elle a pour conseacutequence drsquoeacutetaler le spectre du signal transmis

La meacutethode consiste agrave utiliser des codes qui ont des proprieacuteteacutes matheacutematiques adapteacutees agrave notre

objectif Transmettre en mecircme temps sur la mecircme bande de freacutequence La matrice ci-dessous

donne par exemple 4 codes drsquoeacutetalement (1 par ligne)

Code Orthogonal User 0 1 1 1 1

Code Orthogonal User 1 1 -1 1 -1

Code Orthogonal User 2 1 1 -1 -1

Code Orthogonal User 3 1 -1 -1 1

Tableau 1 Matrice de Hadamart (matheacutematicien) dordre 4

Les proprieacuteteacutes de ces codes (1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1) ne sont pas expliqueacutees ici Nous

nous conterons de veacuterifier leur bon fonctionnement

131 Transmissions successives Chaque tableau ci-dessous repreacutesente une transmission qui est indeacutependante des autres elles ne

se deacuteroulent pas en mecircme temps On veacuterifie qursquoavec la mise en œuvre de laquo lrsquoeacutetalement de spectre raquo

chaque transmission arrive bien agrave destination avec le message qui avait eacuteteacute transmis Le premier

tableau est deacutejagrave rempli en guise drsquoexemple La meacutethode est la suivante

A lrsquoeacutemission

Chaque bit du message est multiplieacute par un code drsquoeacutetalement (une ligne de la matrice)

Le reacutesultat de la multiplication est transmis

A la reacuteception

Chaque symbole reccedilu est multiplieacute par le mecircme code drsquoeacutetalement

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

1 Message User 1 1 0 1 0

2 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3 Symboles transmis User 1 = (1) x (2) 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0

hellip transmission hellip

4 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

5 Deacutecodage = (3) x (4) 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0

6 Message reccedilu (sum (5) nbr_bits) 1 0 1 0

Reacutealiser la transmission du message du User 2 et du User 3 dans les tableaux suivants

| 9

1rsquo Message User 2 0 1 0 1

2rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquo Symboles transmis User 2 = (1rsquo) x (2rsquo) 0 0 0 0

hellip transmission hellip

4rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

5rsquo Deacutecodage = (3rsquo) x (4rsquo) 0 0 0 0

6rsquo Message reccedilu (sum (5rsquo) nbr_bits) 0

1rsquorsquo Message User 3 1 1 0 0

2rsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquo Symboles transmis User 3 = (1rsquorsquo) x (2rsquorsquo) 1 -1 -1 1

hellip transmission hellip

4rsquorsquo Utilisation code orthogonal User3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

5rsquorsquo Deacutecodage = (3rsquorsquo) x (4rsquorsquo) 1 1 1 1

6rsquorsquo Message reccedilu (sum (5rsquorsquo) nbr_bits) 1

132 Transmissions simultaneacutees

Les transmissions se deacuteroulent maintenant simultaneacutement les messages des User 1 User 2 et User

3 sont envoyeacutes en mecircme temps sur la mecircme bande de freacutequence La premiegravere colonne du User 1

est deacutejagrave remplie en guise drsquoexemple La meacutethode est la suivante

Dans lrsquoair

On additionne les symboles transmis par tous les User (1 2 3) ligne 1rsquorsquorsquo

Pour la reacuteception

Chaque symbole reccedilu est multiplieacute par le code drsquoeacutetalement du User

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

Valider le fonctionnement pour la reacuteception des messages

1rsquorsquorsquo sum des symboles transmis ( 3 + 3rsquo + 3rsquorsquo ) 2 -2 0 0

2rsquorsquorsquo Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 1 (sum (3rsquorsquorsquo) nbr_bits) 1

2rsquorsquorsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 -2 0 0

4rsquorsquorsquo Message reccedilu User 2 (sum (3rsquorsquorsquo) nbr_bits) 0

2rsquorsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 3 (sum (3rsquorsquorsquo) nbr_bits) 1

133 Cas du protocole LoRa Le LoRa utilise une meacutethode drsquoeacutetalement de spectre qui nrsquoest pas exactement celle que nous venons

drsquoeacutetudier La finaliteacute est cependant la mecircme Pouvoir transmettre en mecircme temps sur le mecircme

canal Le protocole LoRa utilise sept laquo codes drsquoeacutetalement raquo appeleacutes Spreading Factor [ SF6 SF7 SF8

SF9 SF10 SF11 et SF12 ] qui lui permet drsquoavoir sept transmissions simultaneacutees sur un mecircme canal

| 10

2 Transmission radio et propagation

21 Les uniteacutes et deacutefinitions dB Rapport entre deux puissances Une atteacutenuation est repreacutesenteacutee par un nombre

neacutegatif (-) Un gain est repreacutesenteacute par un nombre positif (+)

Rapport de puissances en dB Rapport de puissance

+ 3 dB Multiplication par 2

- 3 dB Division par 2

0 dB Egaliteacute

+ 10 dB Multiplication par 10

- 10 dB Division par 10

Tableau 2 Comparaison entre les gains en dB et en proportion

dBi Gain theacuteorique drsquoune antenne

dBm Puissance rameneacutee agrave 1mW 0 dBm correspond agrave 1 mW

En reprenant la deacutefinition des dB remplir le tableau suivant

Puissance en dBm Puissance en mW

+ 3 dBm

- 3 dBm

+ 10 dBm

- 10 dBm

Tableau 3 Comparaison entre les puissances en dB et en mW

Le Talkie-Walkie a une puissance drsquoeacutemission de 2W Quelle est la puissance drsquoeacutemission

exprimeacutees en dBm

Sensibiliteacute Puissance minimale qursquoest capable de deacutetecter un reacutecepteur

RSSI Received Signal Strength Indication

SNR Signal over Noise Ratio

Un eacutemetteur transmet agrave une puissance de 13dBm en utilisant une antenne dont le gain

est de 2dBi Les pertes dans lrsquoair sont de 60 dB Lrsquoantenne reacuteceptrice qui possegravede un gain

de 2dBi est relieacutee agrave un reacutecepteur dont la sensibiliteacute est de -80 dBm Le signal pourra-t-il

ecirctre reccedilu

Le link Budget Crsquoest la quantiteacute de puissance que nous pouvons perdre avant drsquoarriver au

reacutecepteur tout en conservant une transmission fonctionnelle Autrement dit crsquoest la

puissance de lrsquoeacutemetteur moins la sensibiliteacute du reacutecepteur Dans lrsquoexemple preacuteceacutedent le

budget que nous avons agrave disposition est de 93dB

| 11

En LoRa nous avons un Link Budget de 157 dB

En LTE (4G) nous avons un Link Budget de 130 dB

Etude de la documentation drsquoun composant LoRa Le RN2483 est le composant radiofreacutequence que nous utiliserons dans notre transmission LoRa

Voici quelques une de ses caracteacuteristiques

Figure 3 Caracteacuteristiques principales du composant radiofreacutequence utiliseacute

Reprenez la deacutefinition du Link Budget et retrouver les 157 dB annonceacute dans cette

documentation

En LoRa plus le code drsquoeacutetalement est grand plus on est capable drsquoeacutemettre dans un milieu bruiteacute La

figure ci-dessous preacutesente les rapports signal sur bruit avec lesquels nous seront capable de reacutealiser

une transmission en fonction des Spreading Factor utiliseacutes

Figure 4 Influence du Spreading Factor sur le SNR acceptable

On remarque que pour un SF8 nous sommes capables drsquoeacutemettre avec un SNR de -10 dB On pourra

transmettre malgreacute le fait que le bruit est 10 fois supeacuterieur au signal

On remarque que pour un SF12 nous sommes capables drsquoeacutemettre avec un SNR de -20 dB On

pourra transmettre malgreacute le fait que le bruit est 100 fois supeacuterieur au signal

| 12

Cependant on remarque aussi que lrsquoutilisation drsquoun Spreading Factor plus eacuteleveacute augmente

consideacuterablement le nombre de symbole eacutemis (2egraveme colonne du tableau) Comme nous le verrons

plus tard cela impactera eacutevidement le temps de transmission

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 7: Cours - Formation LoRa / LoRaWAN

Figure 2 Protocoles utiliseacutes dans lIoT en fonction du deacutebit et de la porteacutee

Dans lrsquoIoT les protocoles utiliseacutes possegravedent une grande porteacutee et des deacutebits faibles

Lrsquoensemble de ces reacuteseaux sont deacutenommeacutes LPWAN Low Power Wide Area Network

113 Bande de freacutequence utiliseacutees En Europe les bandes de freacutequences libres (sans licence) sont

13 Mhz (RFID) 169 Mhz 434 Mhz 868 Mhz 24Ghz 5 Ghz et 24 Ghz (Faisceau Hertzien) Parmi ces

freacutequences seul le 433 MHz et 868 MHz sont utilisables en LoRa

12 Modes de partage du support Quel que soit le protocole utiliseacute le support de transfert de lrsquoinformation est lrsquoair car tous les

protocoles de lrsquoIoT sont Wireless Le support doit ecirctre partageacute entre tous les utilisateurs de telle

faccedilon que chacun des dispositifs Wireless ne perturbe pas les autres Pour cela une bande de

freacutequence est alloueacutee Par exemple pour la radio FM la bande de freacutequence va de 875 Mhz agrave 108

Mhz

Dans leur bande de freacutequence les dispositifs peuvent se partager le support de diffeacuterentes

maniegraveres

FDM (Frequency Division Multiplexing) Ce mode utilise une partie du spectre (bande de

freacutequence) en permanence Exemple Radio FM

TDM (Time Division Multiplexing) Ce mode utilise tout le spectre (bande de freacutequence) par

intermittence Exemple GSM on a laquo 8 time slots raquo par canal

CDMA (Code Division Multiple Access) Ce mode utilise tout le spectre tout le temps

Porteacutee (Range)

Deacutebit (Bandwidth)

| 8

Les Devices LoRa sont capables drsquoeacutemettre sur un mecircme canal en mecircme temps Le protocole LoRa

utilise une modulation tregraves similaire agrave la meacutethode de partage CDMA (pour autant on ne pourra pas

dire que le LoRa utilise le CDMA) Afin de comprendre la pertinence de ce mode de partage du

support nous allons valider le fonctionnement du mode CDMA dans le prochain paragraphe Plus

tard dans le cours nous expliquerons les diffeacuterences de la modulation LoRa

13 Notion drsquo eacutetalement de spectre utiliseacutee en LoRa Nous allons voir au travers drsquoun exercice comment il est possible drsquoutiliser tout le spectre en

permanence tout en eacutetant capable drsquoeffectuer plusieurs transactions simultaneacutees entre diffeacuterents

eacutemetteursreacutecepteurs Cette meacutethode est souvent appeleacutee laquo eacutetalement de spectre raquo car comme

son nom lrsquoindique elle a pour conseacutequence drsquoeacutetaler le spectre du signal transmis

La meacutethode consiste agrave utiliser des codes qui ont des proprieacuteteacutes matheacutematiques adapteacutees agrave notre

objectif Transmettre en mecircme temps sur la mecircme bande de freacutequence La matrice ci-dessous

donne par exemple 4 codes drsquoeacutetalement (1 par ligne)

Code Orthogonal User 0 1 1 1 1

Code Orthogonal User 1 1 -1 1 -1

Code Orthogonal User 2 1 1 -1 -1

Code Orthogonal User 3 1 -1 -1 1

Tableau 1 Matrice de Hadamart (matheacutematicien) dordre 4

Les proprieacuteteacutes de ces codes (1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1) ne sont pas expliqueacutees ici Nous

nous conterons de veacuterifier leur bon fonctionnement

131 Transmissions successives Chaque tableau ci-dessous repreacutesente une transmission qui est indeacutependante des autres elles ne

se deacuteroulent pas en mecircme temps On veacuterifie qursquoavec la mise en œuvre de laquo lrsquoeacutetalement de spectre raquo

chaque transmission arrive bien agrave destination avec le message qui avait eacuteteacute transmis Le premier

tableau est deacutejagrave rempli en guise drsquoexemple La meacutethode est la suivante

A lrsquoeacutemission

Chaque bit du message est multiplieacute par un code drsquoeacutetalement (une ligne de la matrice)

Le reacutesultat de la multiplication est transmis

A la reacuteception

Chaque symbole reccedilu est multiplieacute par le mecircme code drsquoeacutetalement

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

1 Message User 1 1 0 1 0

2 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3 Symboles transmis User 1 = (1) x (2) 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0

hellip transmission hellip

4 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

5 Deacutecodage = (3) x (4) 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0

6 Message reccedilu (sum (5) nbr_bits) 1 0 1 0

Reacutealiser la transmission du message du User 2 et du User 3 dans les tableaux suivants

| 9

1rsquo Message User 2 0 1 0 1

2rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquo Symboles transmis User 2 = (1rsquo) x (2rsquo) 0 0 0 0

hellip transmission hellip

4rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

5rsquo Deacutecodage = (3rsquo) x (4rsquo) 0 0 0 0

6rsquo Message reccedilu (sum (5rsquo) nbr_bits) 0

1rsquorsquo Message User 3 1 1 0 0

2rsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquo Symboles transmis User 3 = (1rsquorsquo) x (2rsquorsquo) 1 -1 -1 1

hellip transmission hellip

4rsquorsquo Utilisation code orthogonal User3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

5rsquorsquo Deacutecodage = (3rsquorsquo) x (4rsquorsquo) 1 1 1 1

6rsquorsquo Message reccedilu (sum (5rsquorsquo) nbr_bits) 1

132 Transmissions simultaneacutees

Les transmissions se deacuteroulent maintenant simultaneacutement les messages des User 1 User 2 et User

3 sont envoyeacutes en mecircme temps sur la mecircme bande de freacutequence La premiegravere colonne du User 1

est deacutejagrave remplie en guise drsquoexemple La meacutethode est la suivante

Dans lrsquoair

On additionne les symboles transmis par tous les User (1 2 3) ligne 1rsquorsquorsquo

Pour la reacuteception

Chaque symbole reccedilu est multiplieacute par le code drsquoeacutetalement du User

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

Valider le fonctionnement pour la reacuteception des messages

1rsquorsquorsquo sum des symboles transmis ( 3 + 3rsquo + 3rsquorsquo ) 2 -2 0 0

2rsquorsquorsquo Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 1 (sum (3rsquorsquorsquo) nbr_bits) 1

2rsquorsquorsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 -2 0 0

4rsquorsquorsquo Message reccedilu User 2 (sum (3rsquorsquorsquo) nbr_bits) 0

2rsquorsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 3 (sum (3rsquorsquorsquo) nbr_bits) 1

133 Cas du protocole LoRa Le LoRa utilise une meacutethode drsquoeacutetalement de spectre qui nrsquoest pas exactement celle que nous venons

drsquoeacutetudier La finaliteacute est cependant la mecircme Pouvoir transmettre en mecircme temps sur le mecircme

canal Le protocole LoRa utilise sept laquo codes drsquoeacutetalement raquo appeleacutes Spreading Factor [ SF6 SF7 SF8

SF9 SF10 SF11 et SF12 ] qui lui permet drsquoavoir sept transmissions simultaneacutees sur un mecircme canal

| 10

2 Transmission radio et propagation

21 Les uniteacutes et deacutefinitions dB Rapport entre deux puissances Une atteacutenuation est repreacutesenteacutee par un nombre

neacutegatif (-) Un gain est repreacutesenteacute par un nombre positif (+)

Rapport de puissances en dB Rapport de puissance

+ 3 dB Multiplication par 2

- 3 dB Division par 2

0 dB Egaliteacute

+ 10 dB Multiplication par 10

- 10 dB Division par 10

Tableau 2 Comparaison entre les gains en dB et en proportion

dBi Gain theacuteorique drsquoune antenne

dBm Puissance rameneacutee agrave 1mW 0 dBm correspond agrave 1 mW

En reprenant la deacutefinition des dB remplir le tableau suivant

Puissance en dBm Puissance en mW

+ 3 dBm

- 3 dBm

+ 10 dBm

- 10 dBm

Tableau 3 Comparaison entre les puissances en dB et en mW

Le Talkie-Walkie a une puissance drsquoeacutemission de 2W Quelle est la puissance drsquoeacutemission

exprimeacutees en dBm

Sensibiliteacute Puissance minimale qursquoest capable de deacutetecter un reacutecepteur

RSSI Received Signal Strength Indication

SNR Signal over Noise Ratio

Un eacutemetteur transmet agrave une puissance de 13dBm en utilisant une antenne dont le gain

est de 2dBi Les pertes dans lrsquoair sont de 60 dB Lrsquoantenne reacuteceptrice qui possegravede un gain

de 2dBi est relieacutee agrave un reacutecepteur dont la sensibiliteacute est de -80 dBm Le signal pourra-t-il

ecirctre reccedilu

Le link Budget Crsquoest la quantiteacute de puissance que nous pouvons perdre avant drsquoarriver au

reacutecepteur tout en conservant une transmission fonctionnelle Autrement dit crsquoest la

puissance de lrsquoeacutemetteur moins la sensibiliteacute du reacutecepteur Dans lrsquoexemple preacuteceacutedent le

budget que nous avons agrave disposition est de 93dB

| 11

En LoRa nous avons un Link Budget de 157 dB

En LTE (4G) nous avons un Link Budget de 130 dB

Etude de la documentation drsquoun composant LoRa Le RN2483 est le composant radiofreacutequence que nous utiliserons dans notre transmission LoRa

Voici quelques une de ses caracteacuteristiques

Figure 3 Caracteacuteristiques principales du composant radiofreacutequence utiliseacute

Reprenez la deacutefinition du Link Budget et retrouver les 157 dB annonceacute dans cette

documentation

En LoRa plus le code drsquoeacutetalement est grand plus on est capable drsquoeacutemettre dans un milieu bruiteacute La

figure ci-dessous preacutesente les rapports signal sur bruit avec lesquels nous seront capable de reacutealiser

une transmission en fonction des Spreading Factor utiliseacutes

Figure 4 Influence du Spreading Factor sur le SNR acceptable

On remarque que pour un SF8 nous sommes capables drsquoeacutemettre avec un SNR de -10 dB On pourra

transmettre malgreacute le fait que le bruit est 10 fois supeacuterieur au signal

On remarque que pour un SF12 nous sommes capables drsquoeacutemettre avec un SNR de -20 dB On

pourra transmettre malgreacute le fait que le bruit est 100 fois supeacuterieur au signal

| 12

Cependant on remarque aussi que lrsquoutilisation drsquoun Spreading Factor plus eacuteleveacute augmente

consideacuterablement le nombre de symbole eacutemis (2egraveme colonne du tableau) Comme nous le verrons

plus tard cela impactera eacutevidement le temps de transmission

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 8: Cours - Formation LoRa / LoRaWAN

| 8

Les Devices LoRa sont capables drsquoeacutemettre sur un mecircme canal en mecircme temps Le protocole LoRa

utilise une modulation tregraves similaire agrave la meacutethode de partage CDMA (pour autant on ne pourra pas

dire que le LoRa utilise le CDMA) Afin de comprendre la pertinence de ce mode de partage du

support nous allons valider le fonctionnement du mode CDMA dans le prochain paragraphe Plus

tard dans le cours nous expliquerons les diffeacuterences de la modulation LoRa

13 Notion drsquo eacutetalement de spectre utiliseacutee en LoRa Nous allons voir au travers drsquoun exercice comment il est possible drsquoutiliser tout le spectre en

permanence tout en eacutetant capable drsquoeffectuer plusieurs transactions simultaneacutees entre diffeacuterents

eacutemetteursreacutecepteurs Cette meacutethode est souvent appeleacutee laquo eacutetalement de spectre raquo car comme

son nom lrsquoindique elle a pour conseacutequence drsquoeacutetaler le spectre du signal transmis

La meacutethode consiste agrave utiliser des codes qui ont des proprieacuteteacutes matheacutematiques adapteacutees agrave notre

objectif Transmettre en mecircme temps sur la mecircme bande de freacutequence La matrice ci-dessous

donne par exemple 4 codes drsquoeacutetalement (1 par ligne)

Code Orthogonal User 0 1 1 1 1

Code Orthogonal User 1 1 -1 1 -1

Code Orthogonal User 2 1 1 -1 -1

Code Orthogonal User 3 1 -1 -1 1

Tableau 1 Matrice de Hadamart (matheacutematicien) dordre 4

Les proprieacuteteacutes de ces codes (1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1) ne sont pas expliqueacutees ici Nous

nous conterons de veacuterifier leur bon fonctionnement

131 Transmissions successives Chaque tableau ci-dessous repreacutesente une transmission qui est indeacutependante des autres elles ne

se deacuteroulent pas en mecircme temps On veacuterifie qursquoavec la mise en œuvre de laquo lrsquoeacutetalement de spectre raquo

chaque transmission arrive bien agrave destination avec le message qui avait eacuteteacute transmis Le premier

tableau est deacutejagrave rempli en guise drsquoexemple La meacutethode est la suivante

A lrsquoeacutemission

Chaque bit du message est multiplieacute par un code drsquoeacutetalement (une ligne de la matrice)

Le reacutesultat de la multiplication est transmis

A la reacuteception

Chaque symbole reccedilu est multiplieacute par le mecircme code drsquoeacutetalement

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

1 Message User 1 1 0 1 0

2 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3 Symboles transmis User 1 = (1) x (2) 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0

hellip transmission hellip

4 Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

5 Deacutecodage = (3) x (4) 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0

6 Message reccedilu (sum (5) nbr_bits) 1 0 1 0

Reacutealiser la transmission du message du User 2 et du User 3 dans les tableaux suivants

| 9

1rsquo Message User 2 0 1 0 1

2rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquo Symboles transmis User 2 = (1rsquo) x (2rsquo) 0 0 0 0

hellip transmission hellip

4rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

5rsquo Deacutecodage = (3rsquo) x (4rsquo) 0 0 0 0

6rsquo Message reccedilu (sum (5rsquo) nbr_bits) 0

1rsquorsquo Message User 3 1 1 0 0

2rsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquo Symboles transmis User 3 = (1rsquorsquo) x (2rsquorsquo) 1 -1 -1 1

hellip transmission hellip

4rsquorsquo Utilisation code orthogonal User3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

5rsquorsquo Deacutecodage = (3rsquorsquo) x (4rsquorsquo) 1 1 1 1

6rsquorsquo Message reccedilu (sum (5rsquorsquo) nbr_bits) 1

132 Transmissions simultaneacutees

Les transmissions se deacuteroulent maintenant simultaneacutement les messages des User 1 User 2 et User

3 sont envoyeacutes en mecircme temps sur la mecircme bande de freacutequence La premiegravere colonne du User 1

est deacutejagrave remplie en guise drsquoexemple La meacutethode est la suivante

Dans lrsquoair

On additionne les symboles transmis par tous les User (1 2 3) ligne 1rsquorsquorsquo

Pour la reacuteception

Chaque symbole reccedilu est multiplieacute par le code drsquoeacutetalement du User

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

Valider le fonctionnement pour la reacuteception des messages

1rsquorsquorsquo sum des symboles transmis ( 3 + 3rsquo + 3rsquorsquo ) 2 -2 0 0

2rsquorsquorsquo Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 1 (sum (3rsquorsquorsquo) nbr_bits) 1

2rsquorsquorsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 -2 0 0

4rsquorsquorsquo Message reccedilu User 2 (sum (3rsquorsquorsquo) nbr_bits) 0

2rsquorsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 3 (sum (3rsquorsquorsquo) nbr_bits) 1

133 Cas du protocole LoRa Le LoRa utilise une meacutethode drsquoeacutetalement de spectre qui nrsquoest pas exactement celle que nous venons

drsquoeacutetudier La finaliteacute est cependant la mecircme Pouvoir transmettre en mecircme temps sur le mecircme

canal Le protocole LoRa utilise sept laquo codes drsquoeacutetalement raquo appeleacutes Spreading Factor [ SF6 SF7 SF8

SF9 SF10 SF11 et SF12 ] qui lui permet drsquoavoir sept transmissions simultaneacutees sur un mecircme canal

| 10

2 Transmission radio et propagation

21 Les uniteacutes et deacutefinitions dB Rapport entre deux puissances Une atteacutenuation est repreacutesenteacutee par un nombre

neacutegatif (-) Un gain est repreacutesenteacute par un nombre positif (+)

Rapport de puissances en dB Rapport de puissance

+ 3 dB Multiplication par 2

- 3 dB Division par 2

0 dB Egaliteacute

+ 10 dB Multiplication par 10

- 10 dB Division par 10

Tableau 2 Comparaison entre les gains en dB et en proportion

dBi Gain theacuteorique drsquoune antenne

dBm Puissance rameneacutee agrave 1mW 0 dBm correspond agrave 1 mW

En reprenant la deacutefinition des dB remplir le tableau suivant

Puissance en dBm Puissance en mW

+ 3 dBm

- 3 dBm

+ 10 dBm

- 10 dBm

Tableau 3 Comparaison entre les puissances en dB et en mW

Le Talkie-Walkie a une puissance drsquoeacutemission de 2W Quelle est la puissance drsquoeacutemission

exprimeacutees en dBm

Sensibiliteacute Puissance minimale qursquoest capable de deacutetecter un reacutecepteur

RSSI Received Signal Strength Indication

SNR Signal over Noise Ratio

Un eacutemetteur transmet agrave une puissance de 13dBm en utilisant une antenne dont le gain

est de 2dBi Les pertes dans lrsquoair sont de 60 dB Lrsquoantenne reacuteceptrice qui possegravede un gain

de 2dBi est relieacutee agrave un reacutecepteur dont la sensibiliteacute est de -80 dBm Le signal pourra-t-il

ecirctre reccedilu

Le link Budget Crsquoest la quantiteacute de puissance que nous pouvons perdre avant drsquoarriver au

reacutecepteur tout en conservant une transmission fonctionnelle Autrement dit crsquoest la

puissance de lrsquoeacutemetteur moins la sensibiliteacute du reacutecepteur Dans lrsquoexemple preacuteceacutedent le

budget que nous avons agrave disposition est de 93dB

| 11

En LoRa nous avons un Link Budget de 157 dB

En LTE (4G) nous avons un Link Budget de 130 dB

Etude de la documentation drsquoun composant LoRa Le RN2483 est le composant radiofreacutequence que nous utiliserons dans notre transmission LoRa

Voici quelques une de ses caracteacuteristiques

Figure 3 Caracteacuteristiques principales du composant radiofreacutequence utiliseacute

Reprenez la deacutefinition du Link Budget et retrouver les 157 dB annonceacute dans cette

documentation

En LoRa plus le code drsquoeacutetalement est grand plus on est capable drsquoeacutemettre dans un milieu bruiteacute La

figure ci-dessous preacutesente les rapports signal sur bruit avec lesquels nous seront capable de reacutealiser

une transmission en fonction des Spreading Factor utiliseacutes

Figure 4 Influence du Spreading Factor sur le SNR acceptable

On remarque que pour un SF8 nous sommes capables drsquoeacutemettre avec un SNR de -10 dB On pourra

transmettre malgreacute le fait que le bruit est 10 fois supeacuterieur au signal

On remarque que pour un SF12 nous sommes capables drsquoeacutemettre avec un SNR de -20 dB On

pourra transmettre malgreacute le fait que le bruit est 100 fois supeacuterieur au signal

| 12

Cependant on remarque aussi que lrsquoutilisation drsquoun Spreading Factor plus eacuteleveacute augmente

consideacuterablement le nombre de symbole eacutemis (2egraveme colonne du tableau) Comme nous le verrons

plus tard cela impactera eacutevidement le temps de transmission

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 9: Cours - Formation LoRa / LoRaWAN

| 9

1rsquo Message User 2 0 1 0 1

2rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquo Symboles transmis User 2 = (1rsquo) x (2rsquo) 0 0 0 0

hellip transmission hellip

4rsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

5rsquo Deacutecodage = (3rsquo) x (4rsquo) 0 0 0 0

6rsquo Message reccedilu (sum (5rsquo) nbr_bits) 0

1rsquorsquo Message User 3 1 1 0 0

2rsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquo Symboles transmis User 3 = (1rsquorsquo) x (2rsquorsquo) 1 -1 -1 1

hellip transmission hellip

4rsquorsquo Utilisation code orthogonal User3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

5rsquorsquo Deacutecodage = (3rsquorsquo) x (4rsquorsquo) 1 1 1 1

6rsquorsquo Message reccedilu (sum (5rsquorsquo) nbr_bits) 1

132 Transmissions simultaneacutees

Les transmissions se deacuteroulent maintenant simultaneacutement les messages des User 1 User 2 et User

3 sont envoyeacutes en mecircme temps sur la mecircme bande de freacutequence La premiegravere colonne du User 1

est deacutejagrave remplie en guise drsquoexemple La meacutethode est la suivante

Dans lrsquoair

On additionne les symboles transmis par tous les User (1 2 3) ligne 1rsquorsquorsquo

Pour la reacuteception

Chaque symbole reccedilu est multiplieacute par le code drsquoeacutetalement du User

Le message reccedilu est eacutegal agrave la somme des symboles diviseacute par le nombre de symbole

Valider le fonctionnement pour la reacuteception des messages

1rsquorsquorsquo sum des symboles transmis ( 3 + 3rsquo + 3rsquorsquo ) 2 -2 0 0

2rsquorsquorsquo Utilisation code orthogonal User 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 1 (sum (3rsquorsquorsquo) nbr_bits) 1

2rsquorsquorsquo Utilisation code orthogonal User 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 -2 0 0

4rsquorsquorsquo Message reccedilu User 2 (sum (3rsquorsquorsquo) nbr_bits) 0

2rsquorsquorsquo Utilisation code orthogonal User 3 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1

3rsquorsquorsquo Deacutecodage (1rsquorsquorsquo) x (2rsquorsquorsquo) 2 2 0 0

4rsquorsquorsquo Message reccedilu User 3 (sum (3rsquorsquorsquo) nbr_bits) 1

133 Cas du protocole LoRa Le LoRa utilise une meacutethode drsquoeacutetalement de spectre qui nrsquoest pas exactement celle que nous venons

drsquoeacutetudier La finaliteacute est cependant la mecircme Pouvoir transmettre en mecircme temps sur le mecircme

canal Le protocole LoRa utilise sept laquo codes drsquoeacutetalement raquo appeleacutes Spreading Factor [ SF6 SF7 SF8

SF9 SF10 SF11 et SF12 ] qui lui permet drsquoavoir sept transmissions simultaneacutees sur un mecircme canal

| 10

2 Transmission radio et propagation

21 Les uniteacutes et deacutefinitions dB Rapport entre deux puissances Une atteacutenuation est repreacutesenteacutee par un nombre

neacutegatif (-) Un gain est repreacutesenteacute par un nombre positif (+)

Rapport de puissances en dB Rapport de puissance

+ 3 dB Multiplication par 2

- 3 dB Division par 2

0 dB Egaliteacute

+ 10 dB Multiplication par 10

- 10 dB Division par 10

Tableau 2 Comparaison entre les gains en dB et en proportion

dBi Gain theacuteorique drsquoune antenne

dBm Puissance rameneacutee agrave 1mW 0 dBm correspond agrave 1 mW

En reprenant la deacutefinition des dB remplir le tableau suivant

Puissance en dBm Puissance en mW

+ 3 dBm

- 3 dBm

+ 10 dBm

- 10 dBm

Tableau 3 Comparaison entre les puissances en dB et en mW

Le Talkie-Walkie a une puissance drsquoeacutemission de 2W Quelle est la puissance drsquoeacutemission

exprimeacutees en dBm

Sensibiliteacute Puissance minimale qursquoest capable de deacutetecter un reacutecepteur

RSSI Received Signal Strength Indication

SNR Signal over Noise Ratio

Un eacutemetteur transmet agrave une puissance de 13dBm en utilisant une antenne dont le gain

est de 2dBi Les pertes dans lrsquoair sont de 60 dB Lrsquoantenne reacuteceptrice qui possegravede un gain

de 2dBi est relieacutee agrave un reacutecepteur dont la sensibiliteacute est de -80 dBm Le signal pourra-t-il

ecirctre reccedilu

Le link Budget Crsquoest la quantiteacute de puissance que nous pouvons perdre avant drsquoarriver au

reacutecepteur tout en conservant une transmission fonctionnelle Autrement dit crsquoest la

puissance de lrsquoeacutemetteur moins la sensibiliteacute du reacutecepteur Dans lrsquoexemple preacuteceacutedent le

budget que nous avons agrave disposition est de 93dB

| 11

En LoRa nous avons un Link Budget de 157 dB

En LTE (4G) nous avons un Link Budget de 130 dB

Etude de la documentation drsquoun composant LoRa Le RN2483 est le composant radiofreacutequence que nous utiliserons dans notre transmission LoRa

Voici quelques une de ses caracteacuteristiques

Figure 3 Caracteacuteristiques principales du composant radiofreacutequence utiliseacute

Reprenez la deacutefinition du Link Budget et retrouver les 157 dB annonceacute dans cette

documentation

En LoRa plus le code drsquoeacutetalement est grand plus on est capable drsquoeacutemettre dans un milieu bruiteacute La

figure ci-dessous preacutesente les rapports signal sur bruit avec lesquels nous seront capable de reacutealiser

une transmission en fonction des Spreading Factor utiliseacutes

Figure 4 Influence du Spreading Factor sur le SNR acceptable

On remarque que pour un SF8 nous sommes capables drsquoeacutemettre avec un SNR de -10 dB On pourra

transmettre malgreacute le fait que le bruit est 10 fois supeacuterieur au signal

On remarque que pour un SF12 nous sommes capables drsquoeacutemettre avec un SNR de -20 dB On

pourra transmettre malgreacute le fait que le bruit est 100 fois supeacuterieur au signal

| 12

Cependant on remarque aussi que lrsquoutilisation drsquoun Spreading Factor plus eacuteleveacute augmente

consideacuterablement le nombre de symbole eacutemis (2egraveme colonne du tableau) Comme nous le verrons

plus tard cela impactera eacutevidement le temps de transmission

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 10: Cours - Formation LoRa / LoRaWAN

| 10

2 Transmission radio et propagation

21 Les uniteacutes et deacutefinitions dB Rapport entre deux puissances Une atteacutenuation est repreacutesenteacutee par un nombre

neacutegatif (-) Un gain est repreacutesenteacute par un nombre positif (+)

Rapport de puissances en dB Rapport de puissance

+ 3 dB Multiplication par 2

- 3 dB Division par 2

0 dB Egaliteacute

+ 10 dB Multiplication par 10

- 10 dB Division par 10

Tableau 2 Comparaison entre les gains en dB et en proportion

dBi Gain theacuteorique drsquoune antenne

dBm Puissance rameneacutee agrave 1mW 0 dBm correspond agrave 1 mW

En reprenant la deacutefinition des dB remplir le tableau suivant

Puissance en dBm Puissance en mW

+ 3 dBm

- 3 dBm

+ 10 dBm

- 10 dBm

Tableau 3 Comparaison entre les puissances en dB et en mW

Le Talkie-Walkie a une puissance drsquoeacutemission de 2W Quelle est la puissance drsquoeacutemission

exprimeacutees en dBm

Sensibiliteacute Puissance minimale qursquoest capable de deacutetecter un reacutecepteur

RSSI Received Signal Strength Indication

SNR Signal over Noise Ratio

Un eacutemetteur transmet agrave une puissance de 13dBm en utilisant une antenne dont le gain

est de 2dBi Les pertes dans lrsquoair sont de 60 dB Lrsquoantenne reacuteceptrice qui possegravede un gain

de 2dBi est relieacutee agrave un reacutecepteur dont la sensibiliteacute est de -80 dBm Le signal pourra-t-il

ecirctre reccedilu

Le link Budget Crsquoest la quantiteacute de puissance que nous pouvons perdre avant drsquoarriver au

reacutecepteur tout en conservant une transmission fonctionnelle Autrement dit crsquoest la

puissance de lrsquoeacutemetteur moins la sensibiliteacute du reacutecepteur Dans lrsquoexemple preacuteceacutedent le

budget que nous avons agrave disposition est de 93dB

| 11

En LoRa nous avons un Link Budget de 157 dB

En LTE (4G) nous avons un Link Budget de 130 dB

Etude de la documentation drsquoun composant LoRa Le RN2483 est le composant radiofreacutequence que nous utiliserons dans notre transmission LoRa

Voici quelques une de ses caracteacuteristiques

Figure 3 Caracteacuteristiques principales du composant radiofreacutequence utiliseacute

Reprenez la deacutefinition du Link Budget et retrouver les 157 dB annonceacute dans cette

documentation

En LoRa plus le code drsquoeacutetalement est grand plus on est capable drsquoeacutemettre dans un milieu bruiteacute La

figure ci-dessous preacutesente les rapports signal sur bruit avec lesquels nous seront capable de reacutealiser

une transmission en fonction des Spreading Factor utiliseacutes

Figure 4 Influence du Spreading Factor sur le SNR acceptable

On remarque que pour un SF8 nous sommes capables drsquoeacutemettre avec un SNR de -10 dB On pourra

transmettre malgreacute le fait que le bruit est 10 fois supeacuterieur au signal

On remarque que pour un SF12 nous sommes capables drsquoeacutemettre avec un SNR de -20 dB On

pourra transmettre malgreacute le fait que le bruit est 100 fois supeacuterieur au signal

| 12

Cependant on remarque aussi que lrsquoutilisation drsquoun Spreading Factor plus eacuteleveacute augmente

consideacuterablement le nombre de symbole eacutemis (2egraveme colonne du tableau) Comme nous le verrons

plus tard cela impactera eacutevidement le temps de transmission

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 11: Cours - Formation LoRa / LoRaWAN

| 11

En LoRa nous avons un Link Budget de 157 dB

En LTE (4G) nous avons un Link Budget de 130 dB

Etude de la documentation drsquoun composant LoRa Le RN2483 est le composant radiofreacutequence que nous utiliserons dans notre transmission LoRa

Voici quelques une de ses caracteacuteristiques

Figure 3 Caracteacuteristiques principales du composant radiofreacutequence utiliseacute

Reprenez la deacutefinition du Link Budget et retrouver les 157 dB annonceacute dans cette

documentation

En LoRa plus le code drsquoeacutetalement est grand plus on est capable drsquoeacutemettre dans un milieu bruiteacute La

figure ci-dessous preacutesente les rapports signal sur bruit avec lesquels nous seront capable de reacutealiser

une transmission en fonction des Spreading Factor utiliseacutes

Figure 4 Influence du Spreading Factor sur le SNR acceptable

On remarque que pour un SF8 nous sommes capables drsquoeacutemettre avec un SNR de -10 dB On pourra

transmettre malgreacute le fait que le bruit est 10 fois supeacuterieur au signal

On remarque que pour un SF12 nous sommes capables drsquoeacutemettre avec un SNR de -20 dB On

pourra transmettre malgreacute le fait que le bruit est 100 fois supeacuterieur au signal

| 12

Cependant on remarque aussi que lrsquoutilisation drsquoun Spreading Factor plus eacuteleveacute augmente

consideacuterablement le nombre de symbole eacutemis (2egraveme colonne du tableau) Comme nous le verrons

plus tard cela impactera eacutevidement le temps de transmission

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 12: Cours - Formation LoRa / LoRaWAN

| 12

Cependant on remarque aussi que lrsquoutilisation drsquoun Spreading Factor plus eacuteleveacute augmente

consideacuterablement le nombre de symbole eacutemis (2egraveme colonne du tableau) Comme nous le verrons

plus tard cela impactera eacutevidement le temps de transmission

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 13: Cours - Formation LoRa / LoRaWAN

| 13

3 La couche physique LoRa

31 La modulation LoRa Comme nous lrsquoavons expliqueacute plus tocirct la modulation LoRa utilise lrsquoeacutetalement de spectre pour

transmettre ces informations Mais au lieu drsquoutiliser des codes drsquoeacutetalement (CDMA) elle utilise une

meacutethode appeleacutee Chirp Spread Spectrum La finaliteacute est toujours la mecircme Avoir plusieurs

transmissions dans le mecircme canal La conseacutequence sur le spectre est aussi la mecircme cela provoque

un eacutetalement du spectre

311 La forme du symbole (Chirp) Le signal eacutemis par la modulation LoRa est un symbole dont la forme de base est repreacutesenteacutee ci-

dessous Son nom (Chirp) vient du fait que ce symbole est utiliseacute dans la technologie Radar (Chirp

Compressed High Intensity Radar Pulse)

Figure 5 Symbole de la modulation LoRa (source Wikipeacutedia)

La freacutequence de deacutepart est la freacutequence centrale du canal moins la Bande Passante diviseacutee par deux

La freacutequence de fin est la freacutequence centrale plus la Bande Passante diviseacutee par deux

La freacutequence centrale est appeleacutee le canal

La bande passante est la largeur de bande occupeacutee autour du canal

On considegravere une eacutemission sur la freacutequence centrale 868 Mhz avec une Bande Passante

de 125 kHz Donner la freacutequence de deacutebut et la freacutequence de fin du sweep

Freacutequence de deacutebut

Freacutequence de fin

Pour faciliter la repreacutesentation de ce symbole on utilise plutocirct un graphique TempsFreacutequence de

la forme suivante

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 14: Cours - Formation LoRa / LoRaWAN

| 14

Figure 6 Forme du symbole de base (CHIRP)

En LoRa chaque symbole repreacutesente un certain nombre de bits transmis La regravegle est la suivante

Nombre de bits transmis dans un symbole = Spreading Factor

Par exemple si la transmission utilise un Spreading Factor de 10 (SF10) alors un symbole repreacutesente

10 bits

Crsquoest-agrave-dire qursquoagrave lrsquoeacutemission les bits sont regroupeacutes par paquet de SF bits puis chaque paquet est

repreacutesenteacute par un symbole particulier parmi 2119878119865formes de symboles possibles

Sur la figure suivante voici un exemple theacuteorique drsquoune modulation en SF2 agrave 868 Mhz sur une

bande passante de 125 kHz Chaque symbole repreacutesente donc 2 bits

Figure 7 Symboles eacutemis en Modulation LoRa (Cas theacuteorique en SF2)

Exemple

On considegravere la suite binaire suivante 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Le Spreading Factor utiliseacute est SF10

Nous regroupons donc les bits par paquet de 10 Chaque paquet de 10 bits sera repreacutesenteacute par un

symbole (sweep) particulier Il y a 1024 symboles diffeacuterents pour coder les 1024 combinaisons

binaires possibles (210)

Freacutequence

Temps

868 000 000 Hz

868 062 500 Hz

Un symbole Un symbole

867 937 500 Hz

Temps

868 000 000 Hz

867 937 500 Hz

Symbole 0

Bits laquo 00 raquo

Symbole 1

Bits laquo 01 raquo

Symbole 2

Bits laquo 10 raquo Symbole 3

Bits laquo 11 raquo

12

5 k

Hz

868 062 500 Hz

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 15: Cours - Formation LoRa / LoRaWAN

| 15

Figure 8 Emission des Chirp en LoRa

Avec un outils drsquoanalyse spectrale actif pendant lrsquoeacutemission LoRa drsquoun Device on peut afficher les

successions de symbole qui sont envoyeacutes Cette oscillogramme a eacuteteacute reacutealiseacute agrave lrsquoaide drsquoun SDR

(Software Digital Radio)

Figure 9 Visualisation des Chirps LoRa reacuteellement eacutemis pendant une transmission

312 Dureacutee drsquoeacutemission drsquoun symbole En LoRa la dureacutee drsquoeacutemission de chaque symbole (Chirp) deacutepend du Spreading Factor utiliseacute Plus le

SF est grand et plus le temps drsquoeacutemission sera long Pour une mecircme bande passante le temps

drsquoeacutemission drsquoun symbole en SF8 est deux fois plus long que le temps drsquoeacutemission drsquoun symbole en

SF7 Ainsi de suite jusqursquoagrave SF12

0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1

Envoi de 1 Chirp Envoi de 1 Chirp Envoi de 1 Chirp

Transmission Transmission Transmission

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 16: Cours - Formation LoRa / LoRaWAN

| 16

Figure 10 Temps drsquoeacutemission drsquoun symbole (Chirp) en fonction du SF

En revanche le temps drsquoeacutemission drsquoun symbole est inversement proportionnel agrave la bande passante

119879119904 =2119878119865

119861119886119899119889119908119894119889119905ℎ Le deacutebit des symboles est donc de

1

119879119878= 119865119904 =

119861119886119899119889119908119894119889119905ℎ

2119878119865 En toute logique plus la

bande passant est eacuteleveacute plus le deacutebit des symboles sera eacuteleveacute Comme chaque symbole comprend

SF bit on retrouve alors le deacutebit binaire

119863119887 = 119878119865119861119886119899119889119908119894119889119905ℎ

2119878119865

Plus le Spreading Factor sera eacuteleveacute plus le deacutebit binaire sera faible

Plus la Bande Passante sera eacuteleveacutee plus le deacutebit binaire sera fort

Exemple Drsquoapregraves la formule du deacutebit binaire trouver le deacutebit pour les deux cas suivants

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

32 Coding Rate Le Coding Rate est un ratio qui augmentera le nombre de bits agrave transmettre afin de reacutealiser de la

deacutetection correction drsquoerreur Dans le cas drsquoun CR = 4 8 il y aura 8 bits transmis reacuteellement agrave

chaque fois que nous souhaitons transmettre 4 bits Dans cette exemple cela provoque une

transmission drsquoun nombre de bit multiplieacute par 2

SF7

Freacutequence

Temps

Freacutequence centrale

Freacutequence haute

Temps drsquoun symbole eacutemit en SF 12

Freacutequence basse

SF8

SF9

SF10

SF11

SF12

Temps drsquoun symbole eacutemit en SF 11

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 17: Cours - Formation LoRa / LoRaWAN

| 17

Figure 11 Influence du Coding Rate sur le nombre de bits ajouteacute

Si on reprend lrsquoexemple preacuteceacutedent avec un CR de 4 5 nous avons une augmentation de 125 du

nombre de bits agrave transmettre Redonner la deacutebit en prenant en compte le CR

Cas 1 Pour SF7 et 125 kHz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

La documentation du composant RN2483 donne les deacutebits en fonction du Spreading Factor

la Bande Passante et le Coding Rate Veacuterifier la coheacuterence du reacutesultat avec votre calcul

preacuteceacutedent

Figure 12 Deacutebit en fonction des paramegravetres de la transmission LoRa

33 Utilisation du LoRa Calculator Le logiciel laquo LoRa Calculator raquo est un petit exeacutecutable permettant de simuler une transmission LoRa

en fonction des caracteacuteristiques saisies Canal SF CR etchellip Il est teacuteleacutechargeable agrave lrsquoadresse

suivante httpsbitly2TyloAh

| 18

Figure 13 Le logiciel LoRa Calculator

En reprenant lrsquoexemple preacuteceacutedent (SF7 Bande Passante 125 kHz CR 45) veacuterifier les

calculs du laquo Equivalent Bitrate raquo

34 Time On Air La norme LoRaWAN impose qursquoun Device LoRa ne transmette pas plus de 1 du temps Cela est

repreacutesenteacute par un Duty Cycle Par exemple un Duty Cycle de 1 signifie que si jrsquoeacutemet pendant 1 je

ne dois plus eacutemettre pendant 99 quel que soit lrsquouniteacute de temps utiliseacutee

En reprenant les exemples preacuteceacutedents quels sont les deacutebits moyens si on prend en compte

le laquo Time On Air raquo

Cas 1 Pour SF7 et 125 khz gt Deacutebit =

Cas 2 Pour SF12 et 125 kHz gt Deacutebit =

Dans le logiciel laquo LoRa Calculator raquo (onglet laquo Energy Profile raquo) nous pouvons estimer la

dureacutee de vie drsquoune batterie Nous prenons lrsquoexemple drsquoun releveacute de tempeacuterature dans un

bacirctiment avec les caracteacuteristiques suivantes

| 19

SF CR Bande Passante etc Nous nous placcedilons dans le cas 1 des exemples preacuteceacutedents

Le releveacute de tempeacuterature se fera toutes les 15 mins

La batterie est constitueacute de 3 petites piles bacirctons [ AAA LR03 ] 12V en seacuterie Soit 36 V

1000 mAh

35 Mise en œuvre LoRa en point agrave point Ce test sera reacutealiseacute avec des modules LoRa RN2483 (Microchip) et une carte microcontrocircleur

ARDUINO

Figure 14 Communication LoRa en Point agrave Point

Reacutealiser le cacircblage de votre module RN2483 suivant le tableau suivant

Connecteur Arduino Click Board RN2483

5V 5V

GND GND

11 RX

10 TX

Tableau 4 Cacircblage de lrsquoARDUINO et de la click Board RN2483

351 Utilisation de lrsquoIDE Arduino Lrsquoenvironnement Arduino est tregraves simple Nous allons reacutealiser un programme pour montrer son

fonctionnement

La connexion de la carte est effectueacutee agrave lrsquoaide drsquoun port USB qui eacutemule une liaison seacuterie

RS232 Il faut donc choisir le bon port Arduino IDE gt Outils gt Port

Pour creacuteer un nouveau programme (sketch) Arduino IDE gt Fichier gt Nouveau

Il y a deux parties dans un sketch

Une fonction setup() qui sera exeacutecuteacutee qursquoune seule fois au deacutemarrage

Une fonction loop() qui sera exeacutecuteacutee en boucle

Ecrire le code suivant

Emetteur

Reacutecepteur

UA

RT

UA

RT

| 20

void setup()

Serialbegin(9600)

void loop()

Serialprintln(hello word)

Compiler et Teacuteleacuteverser Croquis gt Teacuteleacuteverser

Voir la sortie sur la liaison seacuterie Outils gt Moniteur Seacuterie gt Choisir la vitesse de

transmission ici 9600 bauds (en bas agrave droite)

352 Validation du fonctionnement Deux binocircmes joueront le rocircle drsquoeacutemetteur tous les autres binocircmes seront en reacutecepteur

Reacutecupeacuterer les programmes dans Moodle dans le dossier laquo RN2483-Arduino-Point2Point raquo

Installer la librairie RN2483 Arduino IDE gt Croquis gt Inclure une bibliothegraveque gt Ajouter la

bibliothegraveque zip

Reacutepartissez les rocircles Emetteurs Reacutecepteurs et reacutecupeacuterer le programme LoraBlinkerRX ou

LoraBlinkerTX en fonction Les 2 binocircmes en eacutemission devront modifier le code du sketch

Arduino pour transmettre des donneacutees speacutecifiques afin de les diffeacuterencier [

loraSerialprintln(radio tx 30) ]

Validez la reacuteception des donneacutees eacutemises par les deux binocircmes qui transmettent des

donneacutees Ces donneacutees reccedilues sont eacutecrite agrave 57600 bauds sur le moniteur seacuterie de lrsquoArduino

353 Mise en valeur du Spreading Factor On srsquoaperccediloit dans la manipulation preacuteceacutedente que les Devices LoRa reccediloivent les donneacutees des deux

eacutemetteurs Nous allons conserver le mecircme canal drsquoeacutemission (8691 Mhz) mais un des deux

eacutemetteurs va modifier son laquo Spreading Factor raquo La salle sera donc seacutepareacutee en deux groupes

1er groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF7

2egraveme groupe Un eacutemetteur et au minimum un reacutecepteur utiliseront un SF8

Validez la reacuteception des donneacutees eacutemises seulement pour le Spreading Factor que vous

utilisez

| 21

4 Le protocole LoRaWAN

Le LoRa est le type de modulation utiliseacute entre deux Devices ou entre un Device et une Gateway

Lorsque nous parlons de lrsquoensemble de la chaine de communication (Device Gateway Serveur) alors

nous parlons de communication LoRaWAN Nous allons voir lrsquoarchitecture drsquoun reacuteseau LoRaWAN

ainsi que les regravegles de ce protocole

41 Structure drsquoun reacuteseau LoRaWAN Nous retrouvons drsquoun cocircteacute le Device LoRa qui transmet une donneacutee Elle est reacuteceptionneacutee agrave lrsquoautre

extreacutemiteacute du reacuteseau par un Utilisateur La structure globale du reacuteseau LoRaWAN peut ecirctre

repreacutesenteacutee par la figure suivante

411 Les Devices LoRa Les Devices LoRa sont des systegravemes eacutelectroniques appartenant au monde de lrsquoIoT Faible

consommation faible taille faible puissance et faible taille

Ils possegravedent une radio LoRa permettant de joindre les Gateways Les Gateways ne sont pas

adresseacutees speacutecifiquement toutes celles preacutesentes dans la zone de couverture reccediloivent les

messages et les traitent

412 Les Gateways LoRa Elles eacutecoutent sur tous les canaux et sur tous les Spreading Factor Lorsqursquoune trame LoRa est reccedilue

elle transmet son contenu sur internet agrave destination du Network Server qui a eacuteteacute configureacute dans la

Gateway au preacutealable

Elle joue donc le rocircle de passerelle entre une modulation LoRa et une communication IP

Devices

LoRa Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

Internet Internet

Figure 15 Structure globale dun reacuteseau LORAWAN

| 22

Chaque Gateway LoRa possegravede un identifiant unique (EUI sur 64 bits)

413 Le Network Server

Le Network Server reccediloit les messages transmis par les Gateways et supprime les doublons

(plusieurs Gateway peuvent avoir reccedilu le mecircme message) Les informations transmises au Network

Server depuis les Devices LoRa sont authentifieacutes gracircce agrave une cleacute AES 128 bits appeleacutee Network

Session Key NwkSKey Nous parlons bien ici drsquoauthentification et non pas de chiffrement comme

nous le verrons plus tard

414 Application Server Il est souvent sur le mecircme support physique que le Network Server Il permet de dissocier les

applications les unes des autres Chaque application enregistre des Devices LoRa qui auront le droit

Devices Gateways Network

Server

Internet

Network Session Key (NwkSKey)

Authentification

Figure 17 Authentification entre le Device LoRa et le Network Server

Internet

UDP IP

Modulation

LoRa

Device LoRa

Gateway

Network Server

LoRaWAN

Modulation

LoRa

Passerelle LoRa Internet

Internet

UDP IP

LoRaWAN

Transmission Radio

Application Application

Figure 16 Le rocircle de la Gateway LoRa

| 23

de stocker leurs donneacutees (Frame Payload) Les message transmis agrave lrsquoapplication server sont chiffreacutes

gracircce agrave une cleacute AES 128 bits appeleacutee Application Session Key AppSKey

Le scheacutema suivant reacutesume lrsquoutilisation

De la Network Session Key (NwkSKey) pour lrsquoauthentification entre le Device LoRa et le

Network Server

De lrsquoApplication Session Key (AppSKey) pour le chiffrement entre le Device LoRa et

lrsquoApplication Server

Devices Gateways Network

Server Application

Server

Internet

Application Session Key (AppSKey)

Chiffrement

Figure 18 Chiffrement entre le Device LORA et lrsquoApplication Server

| 24

415 Application Web Serveur Cette application doit drsquoune part reacutecupeacuterer les donneacutees de lrsquoApplication Serveur Dans le cadre de

ce cours cela sera fait de deux faccedilons

Avec le protocole HTTP

Avec le protocole MQTT

Figure 20 Application Web Server

Figure 19 Authentification et chiffrement en LoRaWan

Devices Gateways

Network

Server Application

Server

Internet

Network Session Key

Application Session Key

Network

Server Application

Server

Application

Server Web

Utilisateur

Protocole

MQTT ou HTTP

Flux Uplink

Flux Downlink

| 25

Le flux habituel dans lrsquoIoT est le flux Uplink (flux montant) crsquoest-agrave-dire lrsquoeacutemission de donneacutees des

objets vers le serveur Comme nous lrsquoexpliquerons plus loin en LoRaWAN il est aussi possible de

transfeacuterer des donneacutees aux Device LoRa par un flux Downlink (flux descendant)

Drsquoautre part lrsquoapplication mettra agrave disposition les donneacutees aux utilisateurs sous forme par exemple

drsquoun serveur web drsquoune base de donneacutees et drsquoune visualisation graphique

416 Authentification avec le Network Server La Network Session Key (NwkSKey) sert agrave lrsquoauthentification entre le Device LoRa e le Network Server

Afin de reacutealiser cette authentification entre le Device et le Network Server un champ MIC (Message

Integrity Control) est rajouteacute agrave la trame Il est calculeacute en fonction des donneacutees transmises et du

NwkSkey A la reacuteception le mecircme calcul est effectueacute Si les cleacutes sont eacutequivalentes dans le Device et

dans le Network Server alors les deux MIC calculeacutes doivent correspondre

417 Chiffrement des donneacutees vers lrsquoApplication Server

LrsquoApplication Session Key (AppSKey) sert pour le chiffrement entre le Device LoRa et lrsquoApplication

Server Les donneacutees chiffreacutees seront alors deacutecodeacutees agrave la reacuteception sur lrsquoApplication Server srsquoil

possegravede la mecircme cleacute Si on reprend le scheacutema preacuteceacutedent les laquo donneacutees x raquo sont chiffreacutees

deacutechiffreacutees par le processus suivant

Donneacutees x chiffreacutees NwkSkey x

MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees MIC geacuteneacutereacute Emission Donneacutees x chiffreacutees

NwkSkey x

Trame eacutemise Trame reccedilue

Device LoRa Network Server

Si =

Alors la trame est authentifieacutee

MIC geacuteneacutereacute Emission MIC geacuteneacutereacute Reacuteception

MIC geacuteneacutereacute Reacuteception

Figure 21 Authentification dun Device LoRa par le Network Server

| 26

Figure 22 Chiffrement des donneacutees par lApplication Session Key

418 Combinaison de lrsquoauthentification et du chiffrement On peut maintenant repreacutesenter sur le mecircme scheacutema la construction de la trame LoRaWAN avec

drsquoune part lrsquoauthentification et drsquoautre part le chiffrement

Figure 23 Chiffrement puis Authentification

42 Classes des Devices LoRaWAN Les Devices LoRa sont classeacutes en 3 cateacutegories (A B C) en fonction de leur consommation et de leur

accessibiliteacute en Downlink crsquoest-agrave-dire la faciliteacute qursquoun utilisateur aura agrave transmettre une trame au

Device LoRa

421 Classe A (All) Minimal power Application Tous les Devices LoRaWAN sont de classe A Chaque Device peut transmettre (Uplink) agrave la Gateway

sans veacuterification de la disponibiliteacute du reacutecepteur Si la transmission eacutechoue elle sera reacuteeacutemise apregraves

un certain temps Cette transmission est suivie de 2 fenecirctres de reacuteception tregraves courtes La Gateway

peut alors transmettre pendant le laquo RX Slot 1 raquo ou le laquo RX Slot 2 raquo mais pas les deux

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Device LoRa

Donneacutees x non chiffreacutees

AppSKey

Donneacutees x chiffreacutees

Application Server

Donneacutees non chiffreacutees

AppSKey

Donneacutees chiffreacutees Entecircte

NwkSKey

MIC geacuteneacutereacute en eacutemission Trame transmise =

| 27

Figure 24 Slots de reacuteception pour un Device LoRa de classe A

Source de lrsquoimage httpszakelijkforumkpncom

La dureacutee des fenecirctres doit ecirctre au minimum la dureacutee de reacuteception drsquoun preacuteambule Un preacuteambule

dure 1225 Tsymbole et deacutepend donc du Data Rate (DR voir paragraphe 445 pour plus drsquoinformation

sur le DR) Lorsque qursquoun preacuteambule est deacutetecteacute le reacutecepteur doit rester actif jusqursquoagrave la fin de la

transmission Si la trame reccedilue pendant la premiegravere fenecirctre de reacuteception eacutetait bien agrave destination du

Device LoRa alors la deuxiegraveme fenecirctre nrsquoest pas ouverte

Premiegravere fenecirctre de reacuteception

Le Slot RX1 est programmeacute par deacutefaut agrave 1 seconde + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont les mecircme que ceux choisis lors de la phase drsquoeacutemission

(Uplink)

Seconde fenecirctre de reacuteception

Le Slot RX2 est programmeacute par deacutefaut agrave 2 secondes + 20 micros apregraves la fin de lrsquoeacutemission Uplink

La freacutequence et le Data Rate (DR) sont configurables mais fixes

Un Device LoRa qui est uniquement de classe A ne peut pas recevoir srsquoil nrsquoa pas eacutemis Il

nrsquoest donc pas joignable facilement

422 Classe B (Beacon) Scheduled Receive Slot Les Devices de classe B ont le mecircme comportement que les Devices de classe A mais drsquoautres

fenecirctres de reacuteceptions sont programmeacutees agrave des peacuteriodes preacutecises Afin de synchroniser les fenecirctres

de reacuteception du Device LoRa la Gateway doit transmettre des balises (Beacons) de faccedilon reacuteguliegravere

| 28

Figure 25 Slots de reacuteception pour un Device LoRa de classe B

Source de lrsquoimage httpszakelijkforumkpncom

Un Device LoRa de classe B est joignable reacuteguliegraverement sans qursquoil soit neacutecessairement

obligeacute drsquoeacutemettre En revanche il consomme plus qursquoun Device de classe A

423 Classe C (Continuous) Continuously Listening Les Devices de classe C ont des fenecirctres de reacuteception constamment ouvertes entre 2 Uplinks Ces

Devices consomment donc beaucoup plus

Figure 26 Slots de reacuteception pour un Device LoRa de classe C

Source de lrsquoimage httpszakelijkforumkpncom

| 29

Un Device LoRa de classe C est joignable en permanence En revanche crsquoest la classe de

Device qui est la plus eacutenergivore

424 Quelle Gateway pour les flux Downlink

Nous avons donc vu que le fonctionnement classique du protocole LoRaWAN eacutetait de reacutecupeacuterer de

lrsquoinformation depuis le Device LoRa Crsquoest le flux Uplink

Dans le cas ougrave lrsquoutilisateur transmet des informations au Device LoRa (flux Downlink) on peut se

demander quelle Gateway sera choisie pour transfeacuterer les donneacutees au Device LoRa En effet

lrsquoendroit ougrave est situeacute le Device LoRa nrsquoest pas neacutecessairement connu agrave lrsquoavance

La Gateway utiliseacutee pour le Downlink est celle qui a reccedilu le dernier message du Device

LoRa Un message ne pourra jamais arriver agrave destination drsquoun Device LoRa si celui-ci nrsquoa

jamais transmis quel que soit sa classe A B ou C

43 Activation des Devices LoRa et seacutecuriteacute En LoRaWAN les trois eacuteleacutements indispensables pour la communication sont le DevAddr pour

lrsquoindentification du Device ainsi que deux cleacutes le NwkSKey pour lrsquoauthentification et lrsquoAppSKey

pour le chiffrement Deux meacutethodes sont possibles pour fournir ces informations agrave la fois au Device

LoRa et au serveur

Activation By Personalization APB

Over The Air Activation

431 ABP Activation By Personalization Crsquoest la plus simple des meacutethodes Crsquoest donc peut ecirctre celle que nous avons tendance agrave utiliser lors

drsquoun test de prototype et drsquoune mise en place de communication LoRaWAN

Le Device LoRa possegravede deacutejagrave le DevAddr lrsquoAppSKey et le NwkSKey

Le Network server possegravede deacutejagrave le DevAddr et le NwkSKey

Lrsquoapplication serveur possegravede deacutejagrave le DevAddr et le AppSKey

En ABP toutes les informations neacutecessaires agrave la communication sont deacutejagrave connues par le

Device LoRa et par le Serveur

| 30

432 OTAA Over The Air Activation Crsquoest la meacutethode qursquoil faut privileacutegier car crsquoest celle qui est la plus seacutecuriseacutee Le Device LoRa doit

connaitre le DevEUI lrsquoAppEUI et lrsquoAppkey Le Network Server doit lui connaitre la mecircme Appkey

Tous les eacuteleacutements noteacutes EUI (Extended Unique Identifier) sont toujours sur une taille de

64 bits

Gracircce agrave ces informations de deacutepart et une neacutegociation avec le Network Server (Join Request) le

Device LoRa et le serveur vont geacuteneacuterer les informations essentielles DevAddr NwkSKey et

AppSKey

Figure 28 Obtention du DevAddr NwkSKey et AppSKey en OTAA

DevEUI Unique Identifier pour le device LoRa (Equivalent agrave une MAC sur Ethernet)

Certains Device LoRa ont deacutejagrave un DevEUI fourni en usine

AppEUI Unique Identifier pour lrsquoapplication server

DevEUI

AppEUI

AppKey

Join

Request

DevAddr

NwkSKey

AppSKey

Network Server

Application Server

Devices 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 1

NwkSkey 1

AppSKey 1

DevAddr 2

NwkSkey 2

AppSKey 2

Devices 2

DevAddr 2

NwkSkey 2

AppSKey 2

Paramegravetres stockeacutes sur le serveur

Paramegravetres programmeacutes

dans le composant

Figure 27 Parameacutetrage de DevAddr NwkSKey et AppSKey

| 31

AppKey AES 128 cleacute utiliseacutee pour geacuteneacuterer le MIC (Message Code Integrity) lors de la Join

Resquest Il est partageacute avec le Network server

NwkSKey Utiliseacute pour lrsquoauthentification avec le Network Server

AppSKey Utiliseacute pour le chiffrement des donneacutees

433 Seacutecuriteacute Les cleacutes AES 128 bits permettent le chiffrement des informations transmises en LoRaWAN Malgreacute

ce chiffrement une attaque connue en Wireless est celle du REPLAY Crsquoest-agrave-dire que le Hacker

enregistre des trames chiffreacutees circulant sur le reacuteseau LoRa pour les reacuteeacutemettre plus tard Mecircme si

le Hacker ne comprend pas le contenu (les trames sont chiffreacutees) les donneacutees qui sont transporteacutees

sont elles bien comprises par lrsquoApplication Server Des actions peuvent donc ecirctre reacutealiseacutees

simplement par mimeacutetisme

Pour eacuteviter cela la trame LoRaWAN integravegre un champ variable appeleacute laquo Frame Counter raquo Il srsquoagit

drsquoun nombre numeacuterotant la trame sur 16 ou 32 bits LrsquoApplication Server acceptera une trame

uniquement si le laquo Frame Counter raquo reccedilu est supeacuterieur au laquoFrame Counter raquo preacuteceacutedemment Donc

si le Hacker retransmet la trame telle qursquoelle le laquo Frame Counter raquo sera eacutequivalent donc la trame

sera refuseacutee Et comme la trame est chiffreacutee le Hacker nrsquoa pas moyen de savoir comment modifier

un champ de cette trame

Cette seacutecuriteacute impleacutementeacutee par les laquo Frame Counter raquo est inteacuteressante pour srsquoaffranchir drsquoune

attaque par REPLAY mais dans nos tests cela peut poser problegraveme En effet agrave chaque fois que nous

redeacutemarrons le microcontrocircleur notre laquo Frame Counter raquo revient agrave zeacutero alors que celui de

lrsquoApplication Server continue de srsquoincreacutementer Cela peut ecirctre reacutesolue par diffeacuterentes maniegraveres

1 Deacutesactivation du laquo Frame Counter Check raquo Dans certain Application Server cette option

peut ecirctre proposeacutee Bien sucircr il faudra garder en tecircte la faille de seacutecuriteacute que cela engendre

Network Server

Application Server

Devices LoRa

NwkSkey

AppSKey

NwkSkey

AppSKey Hacker

(1) (2)

(1) Ecoute

(2) Reacuteeacutemission

Figure 29 Attaque par REPLAY

| 32

Figure 30 Deacutesactivation du Frame Counter Check dans TTN

2 Utiliser lrsquoauthentification par OTAA au lieu de ABP En effet agrave chaque ouverture de session

en OTAA le laquo Frame Counter raquo est reacuteinitialiseacute coteacute serveur

3 Conserver la valeur du laquo Frame Counter raquo dans une meacutemoire non volatile et reacutecupeacuterer sa

valeur au deacutemarrage du Device LoRa

44 La Trame LoRa LoRaWAN

441 Les couches du protocole LoRaWAN

Lorsque nous avons fait une communication en Point agrave Point nous avons simplement utiliseacute la

couche physique de la modulation LoRa Lorsque nous souhaitons utiliser le protocole LoRaWAN

des couches protocolaires suppleacutementaires se rajoutent

Figure 31 Les couches protocolaires du LoRaWAN

Chaque couche rajoute un service Lors de lrsquoenvoi de la trame les donneacutees utilisateurs sont donc

encapsuleacutees dans chaque couche infeacuterieure jusqursquoagrave la transmission Le deacutetail de lrsquoensemble de la

trame LoRaWAN par couche est deacutecrit sur la figure Figure 32

LoRa Modulation

LoRa Mac

Application

Couche Physique

Couche Mac

Couche Application

| 33

442 Couche Application La couche Application accueille les donneacutees de lrsquoutilisateur Avant de les encapsuler elles sont

chiffreacutees avec lrsquoAppSKey afin de seacutecuriser la transaction

Un ensemble de champs nommeacute Frame Header permet de speacutecifier le DevAddr le Frame Control

le Frame Counter et le Frame Option

Le Frame Port deacutepend du type drsquoapplication et sera choisi par lrsquoutilisateur

Le Frame Payload sont les donneacutees chiffreacutees agrave transmettre Le nombre drsquooctets maximum pouvant

ecirctre transmis (N octets) est donneacute dans le tableau suivant

PHY Payload

P octets Couche

Physique

Couche

Mac

Couche

Application

CRC

2 octets Header + Header CRC

20 bits Preamble

MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Figure 32 Trame LORAWAN complegravete par couche protocolaire

Couche

Application Frame Port

1 octet Frame Option

0 agrave 15 octets Frame Counter

2 octets Frame Control

1 octet Device Address

4 octets Frame Payload

N octets

Donneacutees utilisateur

N octets

AppSKey

Chiffrement des donneacutees

utilisateur par lrsquoAppSkey

Frame Header

Figure 33 Trame LORA couche Applicative

| 34

Data Rate Spreading Factor Bandwidth Max Frame Payload (Nombre N) DR 0 SF12 125 KHz 51 octets

DR 1 SF11 125 KHz 51 octets

DR 2 SF10 125 KHz 51 octets

DR 3 SF9 125 KHz 115 octets

DR 4 SF8 125 KHz 222 octets

DR 5 SF7 125 KHz 222 octets

DR 6 SF7 250 KHz 222 octets

Tableau 5 Taille maximum du Frame Payload en fonction du Data Rate

443 Couche LoRa MAC Cette trame est destineacutee au Network Server Elle est authentifieacutee gracircce au champ MIC (Message

Integrity Protocol) selon la meacutethode expliqueacutee au paragraphe 416

Le protocole LoRa MAC est composeacute de

1 MAC Header Version de protocole et type de message

Type de Message Description 000 Join-Request

001 Join-Accept

010 Unconfirmed Data Up

011 Unconfirmed Data Down

100 Confirmed Data Up

101 Confirmed Data Down

110 Rejoin-request

111 Proprietary

Tableau 6 Les types de messages transmis en LoRaWAN

2 MAC Payload Contient tout le protocole applicatif

3 MIC Message Integrity Code pour lrsquoauthentification de la trame

444 Couche physique Modulation LoRa

Le choix du moment drsquoeacutemission des Devices LoRa se fait de faccedilon simple Lorsqursquoun eacutequipement

doit eacutemettre il le fait sans controcircle et ne cherche pas agrave savoir si le canal est libre Si le paquet a eacuteteacute

perdu il le retransmettra simplement au bout drsquoun temps aleacuteatoire La couche physique est

repreacutesenteacutee par lrsquoeacutemission de la trame suivante

Couche

Mac MAC Payload

M octets MIC

2 octets MAC Header

1 octet

Figure 34 Trame LORA couche LORA MAC

| 35

Le Preacuteambule est repreacutesenteacute par 8 symboles + 425 Le temps du Preacuteambule est donc de 1225

Tsymbole

Len-tecircte (Header optionnel) est seulement preacutesent dans le mode de transmission par deacutefaut

(explicite) il est transmis avec un Coding Rate de 48 Il indique la taille des donneacutees le Coding Rate

pour le reste de la trame et il preacutecise eacutegalement si un CRC sera preacutesent en fin de trame

Le PHY Payload contient toutes les informations de la Couche LoRa MAC

Le CRC sert agrave la deacutetection drsquoerreur de la trame LoRa

445 Canaux et bandes de freacutequences et Data Rate (DR) Le LoRa utilise des bandes de freacutequences diffeacuterentes suivant les reacutegions du monde En Europe la

bande utiliseacutee est celle des 868 Mhz [ De 863 Mhz agrave 870 Mhz ] Le LoRaWAN deacutefinie les 8 canaux agrave

utiliser pour communiquer avec une Gateway suivant le tableau suivant

Canaux Spreading Factor Bandwidth 8681 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz De SF7 agrave SF12 125 kHz

8683 Mhz SF7 250 kHz

8685 Mhz De SF7 agrave SF12 125 kHz

8671 Mhz De SF7 agrave SF12 125 kHz

8673 Mhz De SF7 agrave SF12 125 kHz

8675 Mhz De SF7 agrave SF12 125 kHz

8677 Mhz De SF7 agrave SF12 125 kHz

8679 Mhz De SF7 agrave SF12 125 kHz

Tableau 7 Canaux SF et Bandwidth de notre Gateway LoRaWAN

Une Gateway LoRa eacutecoute donc sur 8 canaux simultaneacutement avec les 6 Spreading Factor

diffeacuterents soit 48 combinaisons possibles

Comme nous lrsquoavons vu le Spreading Factor a des conseacutequences sur le deacutebit de la transmission Ces

deacutebits sont noteacutes DR (Data Rate) et sont normaliseacutes de DR0 agrave DR6

PHY Payload

P octets Couche

Physique CRC

2 octets Header + Header CRC

( Optionnel ) 20 bits Preamble

Figure 35 Trame LORA couche Physique

| 36

Data Rate Spreading Factor Bandwidth DR 0 SF12 125 KHz

DR 1 SF11 125 KHz

DR 2 SF10 125 KHz

DR 3 SF9 125 KHz

DR 4 SF8 125 KHz

DR 5 SF7 125 KHz

DR 6 SF7 250 KHz

Tableau 8 Deacutenomination DR en fonction du SF et de la Bande Passante

446 Trame reccedilue et transmise par la Gateway LoRaWAN La Gateway reccediloit drsquoun cocircteacute un message radio moduleacute en LoRa et transmet de lrsquoautre cocircteacute une trame

IP agrave destination du Network Server

Coteacute interface Radio La Gateway reacuteceptionne une trame LoRaWAN et extrait le PHY Payload Celui-

ci est codeacute au format ASCII en base 64 (voir le paragraphe 541) La Gateway extrait aussi toutes les

informations utiles sur les caracteacuteristiques de la reacuteception qui a eu lieu SF Bandwidth RSSI Time

On Airhellipetchellip

Coteacute interface reacuteseau IP La Gateway transmet lrsquoensemble de ces informations dans un paquet IP

(UDP) au Network Server Les donneacutees transmises sont du texte en format JSON (voir paragraphe

447) La Gateway a donc bien un rocircle de passerelle entre le protocole LoRa drsquoun cocircteacute et un reacuteseau

IP de lrsquoautre

Internet

UDP IP

Device LoRa

Gateway

Network Server Modulation

LoRa

Passerelle LoRa Internet

Transmission Radio Internet

Figure 36 Rocircle de la Gateway LoRa

| 37

447 Le format JSON Le format JSON est un format texte composeacute drsquoune succession de couple nomvaleur Dans

lrsquoexemple de la figure preacuteceacutedente gw_id est un nom et eui-b827ebfffeae26f5 est la valeur

associeacutee Dans cette exemple la valeur est un string Les objets sont deacutelimiteacutes par un des accolades

et

Une valeur peut ecirctre

Un string exemple coding_rate 45

Un nombre exemple spreading_factor 12

Un objet exemple lora spreading_factor 12 air_time 2465792000

Un Boolean

Ethernet

Gateway

Modulation

LORA

Reacutecupeacuteration du PHY PAYLOAD en base 64

Reacutecupeacuteration des caracteacuteristiques de la transmission Canal SF CR hellip

IP (IP dest routereuthethingsnetwork)

UDP (Port dest 1700 Port source 1700)

Donneacutees applicatives (format JSON)

gw_id eui-b827ebfffeae26f5

payload QNAPvA6Ax3ECqHk4C8hfzuA==

lora

spreading_factor 12

bandwidth 125

air_time 2465792000

coding_rate 45

timestamp 2019-01-20T133746017Z

rssi -105

snr -162

dev_addr 0EBC0FD0

frequency 867100000

Internet Transmission Radio LORA

Figure 37 Passerelle (Gateway) LORAWAN

| 38

5 Mise en œuvre drsquoun reacuteseau LoRaWAN

51 Les diffeacuterents types de reacuteseaux Les reacuteseaux LoRaWAN peuvent ecirctre utiliseacute suivant deux meacutethodes

En utilisant les reacuteseaux LoRaWAN opeacutereacutes proposeacutes par les opeacuterateurs de teacuteleacutecoms

En utilisant votre propre reacuteseau LoRaWAN priveacute

511 Les reacuteseaux LoRaWAN opeacutereacutes Ce sont des reacuteseaux LoRaWAN proposeacutes par les opeacuterateurs Par exemple Objenious (filiale de

Bouyges) ou encore Orange Dans le cas de lrsquoutilisation des reacuteseaux opeacutereacutes lrsquoutilisateur a juste

besoin de srsquooccuper des Devices LoRa Les Gateways le Network Server et lrsquoApplication Server sont

geacutereacutes par lrsquoopeacuterateur

512 Les reacuteseaux LoRaWAN priveacutes Chacun est libre de reacutealiser son propre reacuteseau priveacute en impleacutementant sa propre Gateway pour

communiquer avec ses Devices LoRa Lrsquoimpleacutementation du Network Server et de lrsquoApplication Server

peuvent alors ecirctre envisageacutes de diffeacuterentes faccedilons

Network Server et Application serveur priveacutees Crsquoest le deacuteveloppeur qui les mets en place Dans

certaines Gateways une impleacutementation de ces deux serveurs est deacutejagrave proposeacutee Sinon il est

possible de la mettre en place Il existe des serveurs (Network et Application) open source crsquoest le

cas par exemple de LoRa Serveur [ wwwloraserverio ]

Une autre alternantive est httpsgithubcomgotthardplorawan-server

LoRaServer et lorawan-server sont deux applications Open Source

Network Server et Application Server en ligne Un certain nombre de Network Server et

drsquoApplication Server sont proposeacutes Ce sont des services payants ou avec des contreparties

Loriot [ wwwloriotio ]

ResIoT [ wwwresiotio ]

The Things Network [ wwwthethingsnetworkorg ] Crsquoest la solution que nous utiliserons

513 Les zones de couvertures

Les zones de couvertures des reacuteseaux opeacutereacutes sont mise agrave jour par les opeacuterateurs celle drsquoobjenious

est par exemple disponible ici httpsobjeniouscomreseau

Pour connaitre la zone de couverture de notre Gateway utiliseacutee avec TTN nous pouvons utiliser

lrsquoapplication TTN Mapper httpsttnmapperorg Lrsquoideacutee est de promener son Device LoRa associeacute

agrave un GPS dans la zone de couverture des Gateway qui nous entourent A chaque trame reccedilue par le

| 39

Serveur on note les coordonneacutees GPS du Device LoRa ainsi que la Gateway qui a transmis le

message Toutes ces informations sont alors retranscrites sur une carte

52 The Things Network (TTN)

521 Preacutesentation de TTN

Pour la suite nous utiliserons le Network Server et lrsquoApplication Server fourni par TTN

[wwwthethingsnetworkorg]

TTN est gratuit et Open Source En revanche le fait drsquoutiliser TTN impose agrave ceux qui enregistrent

des Gateways de les mettre agrave disposition agrave tous les autres utilisateurs de TTN Lrsquoobjectif est de

reacutealiser un reacuteseau global ouvert

522 Configuration de la Gateway A lrsquouniversiteacute nous avons deux Gateways LoRa (Marque EBDS) Elles sont toutes les deux situeacutees sur

le Campus de Technolac Une Gateway est agrave lrsquointeacuterieur du bacirctiment ISERAN et sert essentiellement

pour les Travaux Pratiques et formations Lrsquoautre est sur le toit du bacirctiment Chablais et est mise agrave

disposition du public via le service de TTN

Les deux Gateway eacutecoutent sur tous les canaux et sur tous les Spreading Factor SF7 gt SF12

Lrsquo IP de la Gateway LoRa agrave lrsquouniversiteacute (bacirctiment ISERAN) est 192168140196

Serveur DNS 1934812032 19348129137

Network Server (TTN) 137616868 routereuthethingsnetwork

Port Upstream 1700 Port Downstream 1700

523 Enregistrement des Gateways Appplication et Devices La configuration de TTN se fait en ligne La premiegravere opeacuteration agrave reacutealiser lorsqursquoune nouvelle

Gateway est deacuteployeacutee crsquoest de lrsquoenregistrer dans TTN

Enregistrement drsquoune Gateway LoRa TTN gt Console gt Gateway gt register gateway

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Figure 38 Scheacutema de notre application

| 40

Figure 39 Enregistrement dune Gateway LoRa sur TTN

Enregistrement drsquoune application TTN gt Console gt Application gt add application

Figure 40 Enregistrement dune application sur TTN

Enregistrement des Devices LoRa dans lrsquoapplication Nom de lrsquoapplication gt register device

Figure 41 Enregistrement des Devices LoRa dans une application

524 Configuration des Devices LoRa Lorsque nous avons enregistreacute des Devices LoRa dans TTN nous devons choisir entre les deux modes

drsquoauthentification Dans un premier temps nous utiliserons le mode le plus simple qui est ABP Nous

geacuteneacuterons dans TTN les DevAddr NetwkSKey et AppSKey

| 41

Figure 42 Configuration des Devices LoRa en ABP dans TTN

53 Mise en application Nous avons dans notre application 10 Devices LoRa drsquoenregistreacutes aduino0 agrave arduino9 Ils sont tous

configureacutes en ABP Les configurations des 10 Devices (DevAddr NetwkSKey et AppSKey) sont noteacutes

en commentaire dans le code de vous allez reacutecupeacuterer

Reacutecupeacuterer le code Arduino laquo RN2483-Arduino-LORAWANino raquo dans Moodle

Modifier votre configuration (DevAddr NetwkSKey et AppSKey) en fonction de votre

numeacutero de binocircme

Veacuterifier que votre Device LoRa arrive bien agrave transmettre des informations (Uplink) vers la

Gateway puis vers le Network Serveur de TTN (The Things Network)

54 Analyse des trames eacutechangeacutees

541 Utilisation de la base 64 Notre Gateway nous preacutesente le Payload PHY en base64 Lrsquoexplication de la meacutethode de

repreacutesentation en base 64 est fourni au travers drsquoun exemple Le code hexadeacutecimal 0x4869

repreacutesente nos donneacutees binaires que nous souhaitons transmettre en base 64

1 On eacutecrit les donneacutees agrave transmettre en binaire

2 On regroupe les eacuteleacutements binaires par des blocs de 6 bits Le nombre de bloc de 6 bits doit

ecirctre un multiple de 4 (minimum 4 blocs) Srsquoil manque des bits pour constituer un groupe de

6 bits on rajoute des zeacuteros

0x4869 = 0100 1000 0110 1001

| 42

3 Srsquoil manque des blocs pour faire un minimum de 4 blocs des caractegraveres speacuteciaux seront

ajouteacutes

4 Chaque groupe de 6 bits est traduit par le tableau suivant (Source Wikipeacutedia)

Figure 43 Codage en base 64

5 Si un bloc de 6 bits manque (ils doivent ecirctre un multiple de 4) on rajoute un ou plusieurs

compleacutements (caractegravere laquo = raquo )

Reacutesultat Le codage de 0x4869 en base 64 est laquo SGk= raquo

010010 000110 100100

On ajoute 00 pour avoir

6 bits dans le groupe

Bloc de 6 bits

010010 000110 100100

S G k

010010 000110 100100

S G k =

1er Bloc

2egraveme Bloc

3egraveme Bloc

4egraveme Bloc

| 43

542 Inteacuterecirct et inconveacutenient de la base 64 Lrsquoutilisation de la base 64 est un choix qui a eacuteteacute fait pour le protocole LoRa LoRaWAN afin de rendre

les donneacutees binaires lisibles Le problegraveme du code ASCII crsquoest qursquoil est composeacute drsquoun certain nombre

de caractegraveres non imprimables (EOF CR LFhellip) Pour eacuteviter ces soucis la base 64 ne comporte que

64 caractegraveres imprimables (voir tableau ci-dessus)

La restriction agrave 64 caractegraveres a cependant un inconveacutenient crsquoest que nous ne pouvons coder que 6

bits (26=64) au lieu de 8 La base 64 est donc moins efficace drsquoune faccedilon geacuteneacuterale

Nous cherchons agrave coder le code ASCII laquo AA raquo en base 64 Retrouver la deacutemarche en

montrant que le reacutesultat en base 64 est laquo QUE= raquo

543 Uplink Du Device LoRa au Network Server Le Network Server de TTN reccediloit des trames IP en provenance de la Gateway Comme nous lrsquoavons

vu preacuteceacutedemment un certain nombre drsquoinformations peuvent ecirctre retrouveacutees avec cette trame

(DevAddr SF Bandwidth etchellip) mais les donneacutees Applicatives sont bien sucircr chiffreacutees (avec

lrsquoAppkSKey) A ce niveau de reacuteception (sans connaitre lrsquoAppSKey) il nrsquoest donc pas possible de

comprendre la totaliteacute du message reccedilu

Imaginons que la trame IP reccedilue par le Network Server de TTN est la suivante

gw_id eui-b827ebfffeae26f6

payload QNMaASYABwAP1obuUHQ=

f_cnt 7

lora

spreading_factor 7

bandwidth 125

air_time 46336000

coding_rate 45

timestamp 2019-03-05T140042448Z

rssi -82

snr 9

dev_addr 26011AD3

frequency 867300000

Le Network Server affiche donc les informations de la faccedilon suivante

Figure 44 Trame reacutecupeacutereacutee sur le laquo Network Server raquo de TTN

Nous retrouvons bien les valeurs fournies par la Gateway

timestamp ( agrave 1 heure pregraves en fonction du fuseau horaire)

| 44

frequency 8673 Mhz

modulation Lora

Coding Rate 45

data Rate SF 7 125 kHz (DR5)

air time 463 ms

Drsquoautres information proviennent de lrsquoanalyse du Payload Le Payload inscrit ici est le PHY Payload

Il y a donc une partie chiffreacutee (Frame Payload) mais les entecirctes sont en claires (voir paragraphe

441) Ce PHY Payload est laquo QNMaASYABwAP1obuUHQ= raquo Lorsque celui-ci est exprimeacute en

hexadeacutecimal au lieu de la base 64 il vaut laquo 40D31A01260007000FD686EE5074 raquo comme le montre

le Network Server de TTN

Figure 45 PHY Payload preacutesenteacute dans notre Network Server

Sa taille est bien de 14 octets (en hexadeacutecimal) comme preacuteciseacute sur la Figure 44

Nous reprenons le format de la trame LoRaWAN vu agrave la Figure 32 Nous pouvons alors retrouver

tous les champs de toute la trame

PHYPayload = 40D31A01260007000FD686EE5074

PHYPayload = MAC Header[1 octet] | MACPayload[] | MIC[4 octets]

MAC Header = 40 (Unconfirmed data up)

MACPayload = D31A01260007000FD6

Message Integrity Code = 86EE5074

MACPayload = Frame Header | Frame Port | FramePayload )

Frame Header = D31A0126000700

FPort = 0F

FramePayload = D6

Frame Header = DevAddr[4] | FCtrl[1] | FCnt[2] | FOpts[015]

DevAddr = 26011AD3 (Big Endian)

FCtrl (Frame Control) = 00 (No ACK No ADR)

FCnt (Frame Counter) = 0007 (Big Endian)

FOpts (Frame Option) =

Vous pouvez veacuterifier lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN

(LoRaWAN packet decoder) httpsbitly2szdXtv

| 45

Figure 46 LoRaWAN packet decoder

544 Uplink Du Network Server agrave lrsquoApplication Server

Nous reprenons lrsquoexemple de la trame ci-dessus (Figure 45) Pour information les cleacutes NwkSKey et

AppSKey suivantes ont eacuteteacute utiliseacutee

NwkSKey E3D90AFBC36AD479552EFEA2CDA937B9

AppSKey F0BC25E9E554B9646F208E1A8E3C7B24

Le Network Server a deacutecodeacute lrsquoensemble de la trame Si le MIC est correct (authentification de la

trame par le NwkSKey) alors le Network Server va passer le contenu du message chiffreacute (Frame

Payload) agrave lrsquoApplication Server Dans notre cas le Frame Payload est (drsquoapregraves le deacutecodage effectueacute

au chapitre preacuteceacutedent)

FramePayload = D6

D6 est le contenu chiffreacute lorsqursquoil est deacutechiffreacute avec lrsquoAppSkey on trouve 01 Vous pouvez veacuterifier

lrsquoensemble de ces informations gracircce au deacutecodeur de trame LoRaWAN httpsbitly2szdXtv

A noter que lrsquoApplication Server recevra les donneacutees chiffreacutees seulement si le Device LoRa a bien

eacuteteacute enregistreacute On peut aussi veacuterifier ci-dessous que lrsquoApplication Serveur de TTN nous retourne bien

un payload (Frame Payload) de 01

Figure 47 Trame reacutecupeacutereacutee sur lrsquoApplication Server de TTN

time 2019-03-05T140042379279991Z

frequency 8673

modulation LORA

data_rate SF7BW125

coding_rate 45

gateways [

gtw_id eui-b827ebfffeae26f6

timestamp 2447508531

time

channel 4

rssi -82

snr 9

latitude 4563647

longitude 58721523

| 46

location_source registry

]

545 Simulation drsquoUplink dans lrsquoApplication Server

Dans beaucoup de situations nous souhaitons valider le fonctionnement de lrsquoApplication Server de

TTN ouet de notre propre Application Il est donc tregraves utile de pouvoir simuler lrsquoenvoi drsquoune trame

LoRa sur lrsquoApplication Server sans que celle-ci soit reacuteellement eacutemise par un Device LoRa Pour cela

un outil existe dans les Settings de chaque Device enregistreacute dans TTN Nous avons juste besoin de

speacutecifier le Frame Payload en clair en hexadeacutecimal et le numeacutero de Port

Figure 48 Simulation drsquoune trame envoyeacutee par un Device LoRa

546 Downlink De lrsquoApplication Server au Device LoRa La communication LoRa est bidirectionnelle Des donneacutees peuvent ecirctre transmis au Device LoRa

depuis lrsquoApplication Server Depuis TTN un outil existe dans les Settings de chaque Device

enregistreacute Lrsquointerface est repreacutesenteacutee ci-dessous

Figure 49 Transmission de donneacutees de lrsquo laquo Application Server raquo jusqursquoau Device LoRa

Replace scheduling Mode Par deacutefaut le Frame Payload transmis remplacera le Frame

Payload en attente (si il existe) Dans ce mode un seul Frame Payload est planifieacute

First scheduling Mode Le Frame Payload est mis en file drsquoattente en premiegravere position

Last scheduling Mode Le Payload est mis en file drsquoattente en derniegravere position

Une demande de confirmation peut ecirctre demandeacutee au Device LoRa pour qursquoil preacutecise srsquoil a bien reccedilu

les donneacutees Lrsquooption laquo confirmed raquo permet donc de speacutecifier le type de trame dans le MAC Header

(voir paragraphe 443) laquo Confirmed Data Down raquo ou laquo Unconfirmed Data Down raquo dans notre cas

| 47

6 La reacutecupeacuteration des donneacutees sur notre propre Application

Nous utiliserons agrave nouveau le Network Server et Application Server de The Things Network Jusqursquoici

nous nous sommes contenteacute de veacuterifier que les donneacutees de lrsquoutilisateur (Frame Payload) soient bien

arriveacutees agrave destination dans lrsquoApplication Server Il faut maintenant les reacutecupeacuterer avec notre propre

Application qui aura pour rocircle

De stocker et traiter les donneacutees

De les mettre agrave disposition de lrsquoutilisateur (Serveur Web par exemple)

Drsquoenvoyer des commandes de lrsquoutilisateur aux Devices LoRa si besoin (Flux Downlink)

Nous allons voir deux meacutethodes pour communiquer entre notre application et TTN

Le protocole HTTP POST

Le protocole MQTT

61 Reacutecupeacuteration des donneacutees en HTTP POST dans lrsquoApplication

611 Preacutesentation du protocole HTTP

Dans le monde de lrsquointernet le protocole HTTP est tregraves utiliseacute pour le dialogue entre un client et un

serveur web Classiquement le client (un navigateur web par exemple) fait une requecircte HTTP GET

et le serveur lui retourne le contenu de la page web demandeacutee

Dans notre cas la probleacutematique est diffeacuterente car le client doit modifier le contenu du serveur

avec les donneacutees envoyeacutees par le Device LORA La requecircte srsquoappelle HTTP POST Son nom indique

que le client va poster (et on pas reacutecupeacuterer) des donneacutees

Lrsquoutilisateur qui souhaite reacuteceptionner des donneacutees sur son serveur doit donc concevoir un serveur

HTTP capable de traiter des requecirctes HTTP POST [ requecircte noteacutee (1) sur la Figure 51 ] fournies par

TTN Dans cette configuration TTN jouera le rocircle de client et notre application le rocircle de serveur

Devices

LORA Gateways

Network

Server Application

Server

Application

Server Web

Utilisateur

HTTP POST

MQTT Internet

Figure 50 Structure globale drsquoun reacuteseau LORAWAN

| 48

Figure 51 Communication bidirectionnelle entre TTN et notre Application

A lrsquoinverse lrsquoutilisateur qui souhaite transmettre des donneacutees agrave destination du Device LoRa

(Downlink) doit ecirctre capable de fournir une requecircte HTTP POST [ requecircte noteacutee (2) sur la Figure 51

] vers TTN Dans cette configuration TTN jouera le rocircle de Serveur et notre application le rocircle de

client

612 Fonctionnement drsquoun client et drsquoun serveur HTTP POST Afin de bien comprendre le fonctionnement des requecirctes HTTP POST nous allons proceacuteder par

eacutetape Le premier test que nous effectuerons sera decorreacuteleacute de TTN Le principe est le suivant

Utilisation drsquoun serveur HTTP disponible sur le web geacuterant les requecirctes HTTP POST [

httpsrbasketsin ] ou [ httpsbeeceptorcom ] par exemple

Utilisation drsquoun client HTTP eacutemettant des requecirctes HTTP POST commande curl sous linux

ou logiciel Postman [ wwwgetpostmancom ] sous windows par exemple

Ce test nous permet de valider le fonctionnement drsquoun serveur HTTP POST et drsquoun client HTTP POST

Une fois que nous serons sucircr de leur fonctionnement nous les utiliserons avec TTN

The Things Network

Application

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 49

Figure 52 Validation dun server HTTP POST et drsquoun client HTTP POST

613 Test du serveur HTTP POST Nous utiliserons un serveur web proposeacute par httpsrbasketsin

Aller sur le site httpsrbasketsin et creacuteer un nouveau laquo Basket raquo Zone ougrave vous pourrez

visualiser les requecirctes qui ont eacuteteacute eacutemises vers votre serveur

A partir de maintenant toutes les requecirctes dirigeacutees vers lrsquoadresse creacuteeacute seront traiteacutees et

srsquoafficheront Dans le menu de configuration il est aussi possible de deacutefinir le contenu de la reacuteponse

qui sera fournie

Deacutefinir un format de reacuteponse pour les requecirctes HTTP POST avec un body personnaliseacute

614 Test du client HTTP POST On peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande (la commande cURL

srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN sous Windows

Commande cURL curl ndashX POST ndashd lsquorsquodonneacutees agrave envoyerrsquorsquo DuServeurHTTP

Logiciel Postman New gt Request gt Creacuteer une requecircte HTTP POST gt Send

Veacuterifier que les requecirctes HTTP POST sont bien reacutecupeacutereacutees sur votre serveur creacutee preacuteceacutedemment

615 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST

Maintenant que nous avons un serveur HTTP (POST) fonctionnel nous allons configurer TTN pour

jouer le rocircle du client et pour qursquoil envoie des requecirctes HTTP POST vers notre Serveur degraves qursquoune

donneacutee drsquoun Device LoRa est disponible Nous geacuterons donc ici le flux Uplink

Requecircte

HTTP POST

Reacuteponse

(contenu parameacutetrable)

Client HTTP (POST)

Server HTTP (POST) [ httpsrbasketsin ]

| 50

Figure 53 Reacutecupeacuteration des donneacutees sur notre Application

Dans TTN nous inteacutegrons un bloc appeleacute laquo HTTP Integration raquo permettant de jouer le rocircle de client

crsquoest-agrave-dire drsquoenvoyer des requecirctes HTTP POST agrave destination de notre nouveau Serveur HTTP

Lrsquointeacutegration se faire agrave partir de TTN gt Console gt Application gt Nom_de_votre_application gt

Integration

Figure 54 Ajout dun client HTTP POST dans TTN

Pour valider le fonctionnement de notre architecture nous pouvons soit

Envoyer une trame depuis un Device LoRa vers TTN

Simuler lrsquoenvoi drsquoune trame drsquoun Device LoRa vers TTN (gracircce agrave lrsquooutil proposeacute par TTN vu

paragraphe 545)

Dans les deux cas voici un exemple de requecircte POST reccedilue sur notre serveur HTTP

app_id test_app_lorawan_sylvainmontagny

dev_id stm32lorawan_1

hardware_serial 0056AF49877

port 1

counter 0

payload_raw qg==

metadata

Requecircte

HTTP POST

Server HTTP (POST) [ httpsrbasketsin ]

The Things Network (Client)

La requecircte contient le Frame Payload deacutechiffreacutee

agrave transmettre agrave lrsquoApplication

| 51

time 2019-01-24T15243703499298Z

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Comme nous pouvons le voir le contenu fourni agrave notre serveur est formateacute en JSON (voir

paragraphe 0) Voici quelques compleacutements drsquoinformation

payload_raw Frame Payload deacutechiffreacute crsquoest donc les donneacutees en clairs dans la base 64

downlink_url URL du serveur HTTP POST qui serviront agrave transmettre des donneacutees au Device

LoRa (flux Downlink)

611 Envoyer des donneacutees depuis notre Application avec HTTP POST

Lorsque nous avons ajouteacute le bloc laquo HTTP Integration raquo au paragraphe preacuteceacutedent nous avons aussi

implicitement activeacute la fonctionnaliteacute que TTN soit precirct agrave recevoir et agrave traiter les requecirctes HTTP

POST La seule information qursquoil nous manque est lrsquoadresse du server HTTP vers lequel il faut eacutemettre

les requecirctes Si on observe la trame reccedilue preacuteceacutedemment en provenance de TTN on srsquoaperccediloit que

dans la trame JSON reccedilu une URL (downlink_url) est speacutecifieacutee

downlink_urlhttpsintegrationsthethingsnetworkorgttn-euapiv2downtest_app_lorawan_sylvainmontagnyrbasketskey=ttn-account-v28ypjj7ZnL3KieQ

Crsquoest cette URL que nous devrons utiliser Nous allons nous placer dans la configuration suivante

Figure 55 Envoi de donneacutees agrave partir de notre Application

Comme preacuteceacutedemment on peut reacutealiser le rocircle du client de deux faccedilons soit en ligne de commande

(la commande cURL srsquoexeacutecute depuis un Terminal sous linux) soit avec le logiciel POSTMAN

Commande cURL curl ndashX POST ndashdata lsquo dev_id Identidiant_De_Votre_Device

payload_raw AQE= rsquo DuServeurHTTP

Logiciel Postman New gt Request gt HTTP POST puis Body gt Raw gt JSON

Requecircte HTTP POST vers serveur TTN laquo downlink_url raquo httpsintegrationsthethingsnetworUaeb8ypKieQ

Contenu de la requecircte

dev_id Identidiant_De_Votre_Device

payload_raw aGVsbG8=

The Things Network (Serveur)

POSTMAN (Client HTTP POST)

| 52

dev_id YourDeviceID

payload_raw aGVsbG8=

Vous devez envoyer le texte (payload_raw) en base 64 Dans lrsquoexemple ci-dessus laquo aGVsbG8= raquo

correspond agrave la chaine de caractegravere laquo hello raquo Vous pouvez utiliser les nombreux encodeurdecodeur

en ligne pour vous aider Le texte doit srsquoafficher sur votre moniteur seacuterie Arduino dans le cadre de

notre deacutemonstrateur sur Arduino

62 Reacutecupeacuteration des donneacutees avec MQTT dans lrsquoApplication

621 Preacutesentation du protocole MQTT

MQTT est un protocole leacuteger qui permet de srsquoabonner agrave des flux de donneacutees Plutocirct que

lrsquoarchitecture Client Serveur classique qui fonctionne avec des Requecirctes Reacuteponses MQTT est

baseacute sur un modegravele Publisher Subscriber La diffeacuterence est importante car cela eacutevite davoir agrave

demander (Requecircte) des donneacutees dont on na aucune ideacutee du moment ougrave elles vont arriver Une

donneacutee sera donc directement transmise au Subscriber degraves lors que celle-ci a eacuteteacute reccedilue dans le

Broker (serveur central)

Figure 56 Modegravele Publisher Subscriber du protocole MQTT

Pour recevoir les donneacutees appartenant agrave un Topic un Subscriber doit souscrire (comme son nom

lindique) au preacutealable sur ce Topic

MQTT est un protocole qui repose sur TCP Lencapsulation des trames sur le reacuteseau est donc la

suivante

Broker

Client

Publisher 1

Client

Publisher 2

Client

Subscriber

Topic

Tempeacuterature

Topic

Humiditeacute

| 53

Figure 57 Protocoles utiliseacutes pour la communication avec MQTT

On peut le veacuterifier par une capture de trame sur Wireshark

Figure 58 Capture dune trame MQTT avec Wireshark

On peut noter que le port TCP utiliseacute pour le protocole MQTT (non chiffreacute) est le 1883

Les Publishers et les Subscribers nrsquoont pas besoin de se connaitre

Les Publishers et les Subscribers ne sont pas obligeacute de srsquoexeacutecuter en mecircme temps

622 Connexion au Broker MQTT Nous nous inteacuteresserons essentiellement aux options de connexion qui permettront de geacuterer la

Qualiteacute de Service (QoS) Pour se connecter un client MQTT envoie deux informations importantes

au Broker

keepAlive Cest la peacuteriode la plus longue pendant laquelle le client Publisher ou Subscriber pourra

rester silencieux Au-delagrave il sera consideacutereacute comme deacuteconnecteacute

cleanSession Lorsque le Client et le Broker sont momentaneacutement deacuteconnecteacutes (au-delagrave du

keepAlive annonceacute) on peut donc se poser la question de savoir ce quil se passera lorsque le client

sera agrave nouveau connecteacute

Si la connexion eacutetait non persistante (cleanSession = True) alors les messages non transmis

sont perdus Quel que soit le niveau de QoS (Quality of Service)

Si la connexion eacutetait persistante (cleanSession = False) alors les messages non transmis

seront eacuteventuellement reacuteeacutemis en fonction du niveau de QoS Voir le chapitre 624

623 Qualiteacute de Service au cours dune mecircme connexion

A partir du moment ougrave le Client se connecte au Broker il est possible de choisir un niveau de fiabiliteacute

des transactions Le Publisher fiabilise leacutemission de ces messages vers le Broker et le Subscriber

fiabilise la reacuteception des messages en provenance du Broker Une parle ici du cas dune mecircme

connexion crsquoest-agrave-dire entre le moment ou le Client se connecte et le moment ougrave

Soit il se deacuteconnecte explicitement (Close connexion)

Soit il na rien eacutemis ni fait signe de vie pendant le temps keepAlive

TCP

MQTT

Reacuteseau

Transport

Couche Application

IP

| 54

Lors dune mecircme connexion la Qualiteacute de Service (QoS) qui est mise en œuvre deacutepend uniquement

de la valeur du QoS selon les valeurs suivantes

QoS 0 At most once (au plus une fois) Le premier niveau de qualiteacute est sans acquittement Le

Publisher envoie un message une seule fois au Broker et le Broker ne transmet ce message quune

seule fois aux Subscribers Ce meacutecanise ne garantit pas la bonne reacuteception des messages MQTT

QoS 1 At least once (au moins une fois) Le deuxiegraveme niveau de qualiteacute est avec acquittement

Le Publisher envoie un message au Broker et attends sa confirmation De la mecircme faccedilon le Broker

envoie un message agrave ces Subscriber et attends leurs confirmations Ce meacutecanisme garantit la

reacuteception des message MQTT

Cependant si les acquittements nrsquoarrivent pas en temps voulu ou srsquoils se perdent la reacuteeacutemission du

message dorigine peut engendrer une duplication du message Il peut donc ecirctre reccedilu plusieurs fois

QoS 2 Exactly once (exactement une fois) Le troisiegraveme niveau de qualiteacute est garanti une seule

fois Le Publisher envoie un message au Broker et attends sa confirmation Le Publisher donne alors

lrsquoordre de diffuser le message et attends une confirmation Ce meacutecanisme garantit que quel que

soit le nombre de tentatives de reacuteemission le message ne sera deacutelivreacute quune seule fois

La Figure 59 montre les trames eacutemises pour chaque niveau de QoS

Figure 59 Qualiteacute de Service en MQTT

La Figure 60 repreacutesentes les 3 captures de trames sur Wireshark repreacutesentant les 3 QoS (1 2 et 3)

que nous venons dexpliquer

Broker

QoS 0

Au plus une fois

Message supprimeacute apregraves envoi

PUBLISH

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Duplications possibles

PUBLISH

PUBLICH Ack

QoS 0

Au moins une fois

Message enregistreacute

Survie agrave une perte de connexion

Pas de duplication

PUBLISH

PUBLISH Receive

PUBLISH Release

PUBLISH Complete

| 55

Figure 60 Capture de trame avec QoS = 0 puis QoS = 1 puis QoS = 2

624 Qualiteacute de Service apregraves une reconnexion

La question que nous nous posons et de savoir ce que deviennent les messages publieacutes sur le Broker

lorsquun ou plusieurs Subscribers sont momentaneacutement injoignables Il est possible de conserver

les messages qui ont eacuteteacute publieacutes sur le Broker afin de les retransmettre lors de la prochaine

connexion Cette possibiliteacute de sauvegarde doit ecirctre activeacutee agrave louverture de connexion gracircce au flag

cleanSession = 0 La connexion sera alors persistante crsquoest-agrave-dire que le Broker enregistre tous les

messages quil na pas reacuteussi agrave diffuser au Subscriber

Le Tableau 9 reacutesume leffet du flag cleanSession et du QoS

Clean Session Flag Subscriber QoS Publisher QoS Comportement True ( = 1) 0 1 2 0 1 2 Messages perdus

False ( = 0 ) 0 0 1 2 Messages perdus

False (= 0 ) 0 1 2 0 Messages perdus

False (= 0 ) 1 2 1 2 Tous les messages sont retransmis

Tableau 9 Qualiteacute de Service en fonction de la valeur du QoS et du flag cleanSession

625 Les Topics du protocole MQTT Les chaicircnes deacutecrivant un sujet forment une arborescence en utilisant la barre oblique comme

caractegravere de seacuteparation La Figure 61 et le Tableau 10 donne un exemple dorganisation de Topic

Figure 61 Exemple de hieacuterarchie de Topic MQTT

Niveau 3

Niveau 2

Niveau 1 Maison

Chambre

Temperature Humidite Bruit

Salon

Temperature

| 56

Nom du Topic Deacutetail du Topic MaisonChambreTemperature La tempeacuterature de la chambre de la maison

MaisonChambreBruit Le bruit de la chambre de la maison

MaisonSalonTemperature La tempeacuterature du Salon de la maison

Tableau 10 Exemple de Topic

Un client peut sabonner (ou se deacutesabonner) agrave plusieurs branches de larborescence agrave laide de

jokers englobant plusieurs Topics Deux caractegraveres jokers existent

Le signe plus + remplace nimporte quelle chaine de caractegravere sur le niveau ougrave il est placeacute

Le diegravese remplace nimporte quelle chaine de caractegravere sur tous les niveaux suivants Il

est obligatoirement placeacute agrave la fin

Nom du Topic Deacutetail du Topic Maison+Temperature Les tempeacuteratures de toutes les piegraveces de la maison

MaisonChambre La tempeacuterature lhumiditeacute et le bruit de la chambre de la maison

Tableau 11 Exemple de Topic

626 Mise en place drsquoun Broker MQTT Afin de bien comprendre le fonctionnement du protocole de MQTT on reacutealise des tests

indeacutependamment de TTN Nous allons mettre en place

Un Broker Mosquitto httpstestmosquittoorg

Un client Publisher MQTT Box sur Windows

Un client Subscriber MQTT Box sur Windows

Figure 62 Test du protocole MQTT

MQTT Client (Subscriber)

MQTT Client (Publisher)

Publish

Subscribe

BROKER (Mosquitto)

| 57

Le Broker MQTT est commun agrave tout le monde Nous pouvons soit le reacutealiser nous-mecircme soit utiliser

un Broker MQTT public de test Nous utiliserons le Broker de test de Mosquitto disponible sur

httpstestmosquittoorg Drsquoautres sont eacuteventuellement disponibles en cas de problegraveme par

exemple httpwwwmqtt-dashboardcom

Si nous deacutecidions de le reacutealiser nous-mecircme agrave lrsquoaide drsquoune Raspberry Pi (par exemple) Lrsquoinstallation

se ferait en deux lignes de commande

apt-get install mosquito Installation

sudo systemctl start mosquittoservice Lancement du service

Il est neacutecessaire drsquoinstaller mosquitto-clients si on souhaite que le Raspberry PI joue aussi le rocircle de

client ce qui nrsquoest pas notre cas

627 Mise en place drsquoun Publisher et drsquoun Subscriber MQTT Lancer le logiciel MQTTBox

MQTTBox gt Create MQTT Client

Dans ce client les seuls champs indispensables sont

Protocol MQTT TCP

Host testmosquittoorg

Figure 63 Configuration dun Client MQTT dans MQTT Box

Tester lrsquoenvoi et la reacuteception sur les Topics de votre choix

628 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT La reacutecupeacuteration des donneacutees fait reacutefeacuterence au flux Uplink Dans ce cas

TTN joue le rocircle de client Publisher

TTN joue aussi le rocircle de Broker

Notre application joue le rocircle de Subscriber

Nous pouvons donc repreacutesenter lrsquoapplication globale par le scheacutema suivant

| 58

Figure 64 Publisher et Subscriber dans en MQTT avec TTN

La publication est repreacutesenteacutee par la trame MQTT (1)

La souscription est repreacutesenteacutee par la trame MQTT (2)

Le client Publisher eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box mais cette fois avec la configuration suivante

Protocol mqtt tcp

Host Crsquoest lrsquoIP du Broker vers lequel il faut se connecter Dans notre cas il srsquoagit de celui

de TTN dont lrsquoadresse est euthethingsnetwork

Username La connexion vers le broker MQTT est soumis agrave une authentification Username

Password Dans notre cas le Username correspond au nom de notre application crsquoest-agrave-

dire seminaire_lorawan Si vous avez choisi une autre applicationil faut bien mettre la

votre

Password Le Password est nommeacute laquo Access Key raquo par TTN Elle vous sera donneacutee par

lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application vous

trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt Overview

Figure 65 Access Keys de lapplication dans TTN

The Things Network (Application Server)

BROKER

Application

The Things Network (Network Server)

Publish (1 )

[ Flux Uplink ]

Subscribe (2 )

[ Flux Uplink ]

| 59

Figure 66 Configuration du Client dans MQTT Box

Le client MQTT eacutetant configureacute il est maintenant capable de se connecter au Broker Il reste donc agrave

deacutefinir le fait que le client sera Subscriber Les informations que recevra le Subscriber deacutependent du

Topic auquel nous souscrivons Voici les Topic disponibles sur le Broker de TTN

ltAppIDgt correspond au nom de votre Application

ltDevIDgt correspond au nom de votre Device LoRa

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink ltAppIDgtdevicesltDevIDgtup

[Donneacutees] Flux Downlink ltAppIDgtdevicesltDevIDgtdown

[Activation Events] Activation dun Device ltAppIDgtdevicesltDevIDgteventsactivations

[Management Events] Creacuteation dun Device ltAppIDgtdevicesltDevIDgteventscreate

[Management Events] Update dun Device ltAppIDgtdevicesltDevIDgteventsupdate

[Management Events] Suppression dun Device ltAppIDgtdevicesltDevIDgteventsdelete

[Downlink Events ] Message programmeacute ltAppIDgtdevicesltDevIDgteventsdownscheduled

[Downlink Events ] Message envoyeacute ltAppIDgtdevicesltDevIDgteventsdownsent

[Erreurs] Uplink erreurs ltAppIDgtdevicesltDevIDgteventsuperrors

[Erreurs] Downlink erreurs ltAppIDgtdevicesltDevIDgteventsdownerrors

[Erreurs] Activations erreurs ltAppIDgtdevicesltDevIDgteventsactivationserrors

Tableau 12 Topics enregistreacutes dans TTN

Dans un premier temps nous souscrivons au Topic +devices+up Cela signifie que nous

souscrivons agrave tous les Devices LoRa de toutes nos applications pour le flux Uplink

Figure 67 Configuration du Subscriber

Les eacuteleacutements eacutemis par le Broker seront alors afficheacutes dans MQTTBox La

| 60

Figure 68 Trame LoRaWAN reccedilu sur le Subscriber MQTT

Ces donneacutees sont eacutecrites en JSON nous pouvons les remettre en forme

applicationID3

applicationNamemyApplication

deviceNamearduino0

devEUI0056xxxxxxxxx877

txInfo

frequency868500000

dr5

adrfalse

fCnt792

fPort15

dataSGVsbG8=

Le Frame Payload deacutechiffreacute est fourni dans le champ data en base 64 La valeur fournie par

dataSGVsbG8= correspond bien agrave la chaine de caractegravere hello que nous avons eacutemise avec le

Device LoRa

629 Envoyer des donneacutees depuis notre Application avec MQTT

Lrsquoenvoi des donneacutees fait reacutefeacuterence au flux Downlink Dans ce cas

Notre application joue le rocircle de Publisher

TTN joue le rocircle de Broker

TTN joue aussi le rocircle de client Subscriber

| 61

La publication est repreacutesenteacutee par la trame MQTT (3)

La souscription est repreacutesenteacutee par la trame MQTT (4)

Le client Subscriber eacutetant reacutealiseacute par TTN il est deacutejagrave configureacute Il nous reste agrave configure le client

Subscriber Nous utiliserons agrave nouveau MQTT Box Le rocircle de client dans MQTT Box a eacuteteacute faite au

paragraphe 628 Il nous reste simplement agrave ajouter le rocircle de Publisher La configuration est la

suivante

Topic du Subscriber seminaire_lorawandevicesarduino0down ougrave seminaire_lorawan

est agrave remplacer par le nom de votre application et arduino0 par le nom du Device LoRa vers

lequel vous souhaitez envoyeacute une donneacutee (Voir chapitre 628 pour comprendre les Topics)

Le Payload doit ecirctre au format JSON Lrsquoexemple suivant envoie laquohello raquo

payload_raw aGVsbG8=

The Things Network (Application Server)

BROKER

Application

Publish (3)

[ Flux Downlink ]

The Things Network (Network Server)

Subscribe (4)

[ Flux Downlink ]

| 62

Figure 69 Configuration du Publisher

Vous devriez voir les donneacutees arriver sur votre Device LoRA

| 63

7 Creacuteation de notre propre Network et Application Server

711 Objectifs Lors de la mise en œuvre du reacuteseau LoRaWAN au chapitre 52 nous avons utiliseacute TTN (The Things

Network) pour jouer le rocircle de Network Server et drsquoApplication Server Pour de multiples raisons

Seacutecuriteacute autonomie coucircthellipil peut ecirctre inteacuteressant de monter soi-mecircme un Network Server et un

Application Server Cela est possible seulement si vous posseacutedez vos propres Gateway puisque

celles-ci devront forwarder leur paquet agrave destination preacutecise Il faudra donc les reconfigurer pour

qursquoelles pointent vers votre nouvelle architecture

712 Preacutesentation de LoRaServer LoRaServer [ wwwloraserverio ] est un projet Open-Source reacutepondant exactement au besoin que

nous avons Nous lrsquoutiliserons sur une cible Raspberry PI En reacutealiteacute il peut souvent ecirctre mise en

place dans le mecircme systegraveme que la Gateway surtout si celle-ci est elle-mecircme agrave base de RPI Les

Gateway EBDS que nous posseacutedons possegravedent drsquoailleurs un Network Server et un Application Server

que nous aurions pu utiliser Neacuteanmoins pour des raisons peacutedagogiques il est inteacuteressant de

seacuteparer les systegravemes pour bien diffeacuterencier les probleacutematiques

Attention il y a une ambiguiumlteacute dans la deacutenomination des entiteacutes logiciels de LoRaServer

LoRaServer (sans espace entre le mot LoRa et Server) est le nom du projet global En

revanche LoRa Server (avec un espace) est le nom du service qui joue le rocircle du Network

Server

Lrsquoarchitecture et le fonctionnement de LoRaServer est preacutesenteacutee dans sa documentation par le

scheacutema suivant

Devices

Arduino

RN2483

Gateways

EBDS

Network

Server Application

Server

IP

Raspberry PI

Figure 70 Architecture globale de notre reacuteseau loRaWAN

| 64

Figure 71 Architecture deacutetailleacutee de LoRaServer

On srsquoattends agrave voir uniquement un Network Server (LoRa Server) et un Application Server (LoRa App

Server) mais ce scheacutema est plus complexe Il demande un certain nombre drsquoexplications pour bien

comprendre ce que nous allons installer et la faccedilon dont nous lrsquoutiliserons par la suite

713 Le laquo Packet Forwarder raquo (Gateway) Comme nous lrsquoavons vu au chapitre 412 les Gateways LoRa sont des passerelles entre la

modulation LoRa et un reacuteseau IP Pour reacutealiser cette passerelle un service nommeacute laquo UDP Packet

Forwarder raquo a eacuteteacute deacuteveloppeacute par Semtech httpsgithubcomLora-netpacket_forwarder Dans

ce dossier github un fichier nommeacute PROTOCOLTXT explique parfaitement ce protocole applicatif

qui travaille au-dessus de UDP

Figure 72 Protocole Uplink (PUSH_DATA du Packet Forwarder)

| 65

On remarque que les paquets sont envoyeacutes en UDP au Network Server dans une trame appeleacutee

PUSH_DATA Cette trame est acquitteacutee par le Network Server par une trame appeleacutee PUSH_ACK

Sur notre Network Server nous pouvons reacutealiser une capture de trame pour veacuterifier si le protocole

est bien celui preacutesenteacute dans le document

Figure 73 Trame captureacutee par Wireshark lors dun Uplink

Drsquoapregraves la capture preacuteceacutedente on remarque que le Packet Forwarder fonctionne bien avec UDP sur

le port 1700

Le contenu des donneacutees (champ Data) est deacutetailleacute dans le tableau suivant

Champ | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | random token

[3] | 3 | PUSH_DATA identifier = 0x00

[4] | 4-11 | Gateway unique identifier (MAC address)

[5] | 12-end | JSON object starting with ending with

Lrsquoobjet JSON de la transmission reacuteeacutecrit plus proprement est celui-ci

Figure 74 Analyse du champ Donneacutees du protocole laquo Packet Forwarder raquo

0000 02 f9 30 00 b8 27 eb ff fe ae 26 f5 7b 22 72 78 0amprx 0010 70 6b 22 3a 5b 7b 22 74 6d 73 74 22 3a 33 37 35 pk[tmst375 0020 35 30 30 35 38 31 39 2c 22 63 68 61 6e 22 3a 32 5005819chan2 0030 2c 22 72 66 63 68 22 3a 31 2c 22 66 72 65 71 22 rfch1freq 0040 3a 38 36 38 2e 35 30 30 30 30 30 2c 22 73 74 61 868500000sta 0050 74 22 3a 31 2c 22 6d 6f 64 75 22 3a 22 4c 4f 52 t1moduLOR 0060 41 22 2c 22 64 61 74 72 22 3a 22 53 46 37 42 57 AdatrSF7BW 0070 31 32 35 22 2c 22 63 6f 64 72 22 3a 22 34 2f 35 125codr45 0080 22 2c 22 6c 73 6e 72 22 3a 36 2e 35 2c 22 72 73 lsnr65rs 0090 73 69 22 3a 2d 31 2c 22 73 69 7a 65 22 3a 31 38 si-1size18 00a0 2c 22 64 61 74 61 22 3a 22 51 4e 4d 61 41 53 59 dataQNMaASY 00b0 41 41 51 41 50 70 79 50 5a 39 35 35 2b 53 6d 59 AAQAPpyPZ955+SmY 00c0 2f 22 7d 5d 7d ]

Ch

amp

[1

]

Ch

amp

[2

]

Ch

amp

[3

]

Ch

amp

[4

]

| 66

rxpk[ tmst3755005819

chan2

rfch1

freq868500000

stat1

moduLORA

datrSF7BW125

codr45

lsnr65

rssi-1

size18

dataQNMaASYAAQAPpyPZ955+SmY

]

Le champ data correspond au PHY Payload

De la mecircme faccedilon on retrouve la Trame drsquoacquittement

Figure 75 Trame captureacutee par Wireshark lors de lrsquoacquittement drsquoun Uplink

Champs | Num octet | Fonction

-------|--------------------------------------------------------

[1] | 0 | protocol version = 0x02

[2] | 1-2 | same token as the PUSH_DATA to acknowledge

[3] | 3 | PUSH_ACK identifier = 0x01

Nous retrouvons bien tous ces champs dans la trame Wireshark

714 LoRa Gateway Bridge Nous avons deacutecrit au chapitre preacuteceacutedent (713) le fonctionnement du Packet Forwarder Le

Network Server(Lora Server) que nous allons mettre en place aurait tregraves bien pu srsquointerfacer

directement agrave ce protocole Mais cela aurait plusieurs impacts dont un qui est important dans la

conception de logiciel Si le Packet Forwarder change ou si un autre type de Forwarder est utiliseacute

alors lrsquoutilisation du LoRa Server devient impossible Il a donc eacuteteacute choisi de creacuteer une eacutetape

intermeacutediaire Le Network Server que nous mettrons en plus utilisera le protocole MQTT plutocirct que

le protocole UDP packet Forwarder

En drsquoautres termes le LoRa Gateway Bridge est un service qui fera abstraction du Packet Forwarder

pour srsquointerfacer plus simplement avec le Network Server

715 LoRa Server (Network Server) Il srsquoagit de notre Network Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

413 Cependant il srsquointerfacera au protocole MQTT en recevant les informations agrave partir du

Broker au lieu de recevoir directement les trames en provenance de la Gateway

| 67

716 LoRa App Server (Application Server) Il srsquogit de notre Application Server qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre

414

717 LoRa Geo Server Il srsquoagit drsquoun service qui permet drsquoutiliser certaines proprieacuteteacutes du protocole LoRa pour proposer un

service de geacuteolocalisation des Devices LoRa Nous ne lrsquoutiliserons pas dans notre cas

718 Application Il srsquoagit de notre Application qui a le mecircme rocircle que celui que nous avons eacutetudieacute au chapitre 415

Elle ne fait pas partie du projet LoRaServer crsquoest donc bien toujours agrave nous de proposer notre propre

Application

Figure 76 Les interfaces possibles entre LoRaServer et lrsquoApplication utilisateur

Comme nous pouvons le voir sur la figure preacuteceacutedente deux possibiliteacutes sont offertes pour interfacer

notre application JSON REST (incluant HTTP POST) et via un Broker MQTT Ces deux meacutethodes ont

deacutejagrave eacuteteacute traiteacutee au chapitre 61 (HTTP POST ) et au chapitre 62 (MQTT) Nous verrons aussi drsquoautres

possibiliteacutes pour personnaliser notre application au chapitre 7

72 Installation de LoRaServer

721 Mise en place de lrsquoenvironnement

Nous allons installer une carte SD avec la derniegravere version de Raspbian Nous ne deacutetaillerons pas la

deacutemarche pour cela car elles sont largement documenteacutees et mises agrave jour sur le site

wwwraspberrypiorg

Installer un carte SD avec la derniegravere version de Raspbian

Plutocirct que de fonctionner avec un clavier et une souris nous preacuteconisons de travailler agrave distance

avec la RPI via une connexion SSH Depuis quelques anneacutees Raspbian a supprimeacute le deacutemarrage du

service SSH au boot Heureusement il est possible de le reacuteactiver par la meacutethode suivante

Avec Windows ou Linux ouvrir la partition BOOT de votre carte SD et placer un fichier agrave la

racine nommeacute sshtxt (ou ssh)

Mettre la carte SD dans votre RPI et la deacutemarrer

| 68

Pour acceacuteder agrave la RPI en SSH depuis Windows nous utiliserons de preacutefeacuterence le logiciel

client MobaXterm mais tout autre client SSH est valable

Installer MobaXterm sur votre PC et connectez-vous agrave votre Raspberry PI

Lrsquoutilisation drsquoun espion de reacuteseau type Wireshark peut ecirctre inteacuteressant pour eacutetudier les trames qui

sont reccedilues et qui sont eacutemises Cela nous permettra de valider le fonctionnement des diffeacuterents

protocoles reacuteseau qui permettent de communiquer agrave la Gateway drsquoune part et agrave lrsquoApplication

drsquoautre part Nous utiliserons tshark

apt-get install tshark installation

tshark ndashn -i eth0 Exemple drsquoune analyse sur lrsquointerface wlan0

722 Installation sur la Raspberry PI La meacutethode drsquoinstallation de LoRaServer est documenteacutee sur le site web agrave lrsquoadresse suivante

[ httpswwwloraserverioguidesdebian-ubuntu ] Nous installerons le LoRa Gateway Bridge

le LoRa Server et le LoRa App Server

Apregraves lrsquoinstallation la configuration se fait par une interface graphique accessible par le reacuteseau sur

le port 8080

Si vous travaillez sur la RPI connectez-vous sur httplocalhost8080

Si vous travaillez agrave distance (SSH) connectez-vous sur httpIP_RPI8080

Les Usernames et Password par deacutefaut sont

Username admin

Password admin

Lrsquoeacutecran drsquoaccueil sera donc le suivant

Figure 77 Architecture globale apregraves installation de LoRaServer

Devices

Gateways LoRa

UDP Packet Forwarder

Application Server

LoRa App Server

Internet

Network Server

LoRa Server

LoRa Gateway Bridge

| 69

Figure 78 Ecran daccueil de LoRaServer apregraves authentification

71 Configuration de LoRa Server pour lUplink

711 Enregistrement drsquoune nouvelle Organisation

Pour enregistrer une nouvelle Organizations Organizations gt Create Puis entrer les configurations

suivantes

Figure 79 Enregistrement dun nouvelle Organisation

712 Enregistrement drsquoune instance du Network Server Pour enregistrer une nouvelle instance du Network Server Network Server gt Create Puis entrer

les configurations suivantes

| 70

Figure 80 Enregistrement dun nouveau Network Server

Dans lrsquoonglet Gateway Discovery il est possible drsquoactiver une option de deacutecouverte de Gateway aux

alentours Lorsqursquoelle est configureacutee le Network Server va envoyer une trame Downlink de

configuration de la Gateway lui ordonnant de reacutealiser des PING en LoRa La configuration du

Gateway Discovery preacutevoit de speacutecifier

Le nombre de fois par jour que les PING LoRa sont envoyeacutes

Le canal drsquoeacutemission

Le Data Rate (Voir paragraphe 445)

Un PING LoRa reccedilu sur une Gateway sera retransmis sur le Network Server (Lora Server) et une carte

sera afficheacutee

Lrsquoonglet TLS Certificates ne sera pas utiliseacute dans le cadre de notre deacutemonstration

713 Enregistrement drsquoune Application (Sur lrsquoApplication Server) Il faut tout drsquoabord faire un enregistrement drsquoun laquo service-profile raquo Un laquo service profile permet de

faire la connexion entre le Network Server et les Applications que nous enregistrerons dans notre

Organisation Service-profiles gt Create

Service-profile name myServiceProfile

Network-server myNetworkServer

On laissera par deacutefaut toutes les autres options

Pour enregistrer une nouvelle Application Applications gt Create Puis entrer les configurations

suivantes

| 71

Figure 81 Enregistrement dune nouvelle Application

714 Enregistrement des Devices LoRa Il faut tout drsquoabord faire lrsquoenregistrement drsquoun Device-profile pour les Devices LoRa que vous

souhaitez connecter Dans notre cas nous ferons un premier test en speacutecifiant que nous utilisons

seulement le mode drsquoauthentification ABP (voir chapitre 431) Devices profile gt Create

Figure 82 Enregistrement dun laquo Device profile raquo

Nous pouvons alors creacuteer dans notre Application des nouveaux Devices Application gt

myApplication gt Create

| 72

Figure 83 Enregistrement dun nouveau Device LoRa

Dans la fenecirctre Activation on va alors configurer les 3 eacuteleacutements indispensables agrave une

authentification en APB Le DevAddr le NwkSKey et lrsquoAppSKey

Figure 84 Configuration de lenregistrement du Device LoRa (en ABP)

La configuration minimale de LoRaServer est maintenant termineacutee Nous pouvons donc brancher

un Device LoRa qui possegravede les les attribus (DevAddr NwkSKey et AppSKey) que nous avons

enregistreacute dans LoRaServer et le faire eacutemettre

715 Visualisation des trames reccedilues Les trames eacutemises par le Device LoRa vont donc parcourir le cheminement suivant

| 73

Figure 85 Reacutesumeacute du cheminement des trames LoRaWan en Uplink avec LoRaServer

En allant dans le Live Device Data (Application gt Nom_du_Device gt Live Device Data) on peut voir la

liste des trames reccedilues ainsi que les donneacutees applicatives deacutechiffreacutees

Figure 86 Reacuteception des trames des Devices LoRa

Figure 87 Analyse des trames des Devices LoRa

Dans lrsquoonglet LIVE LORAWAN FRAME nous pouvons voir les trames LORAWAN et si besoin eacutetudier

le contenu de ce qursquoelles contiennent En revanche les donneacutees applicatives sont ici chiffreacutees

UDP

Packet Forwarder

LoRa Bridge

Gateway LoRa Server LoRa App Server

Gateway

Server

Internet

| 74

Figure 88 Reacuteception des Trames LoRaWAN

72 Configuration de LoRaServer pour linteacutegration dApplication Nous avons vu dans le chapitre 718 que linterface entre LoRaServer et notre Application pouvait

ecirctre reacutealiseacutee soit par MQTT soit par les meacutethodes REST (HTTP POST) Nous avons deacutejagrave impleacutementeacute

et expliqueacute ces protocoles dans le cadre de son utilisation avec TTN Nous allons donc juste

configurer LoRaServer pour tester ces deux meacutethodes

721 Reacutecupeacuterer des donneacutees sur notre Application avec HTTP POST Nous utiliserons exactement la mecircme meacutethode que celle que nous avons utiliseacute avec TTN au

chapitre 615 Les diffeacuterentes Clients et Serveurs disponibles pour ces tests sont expliqueacutes au

paragraphe 612

Dans LoRaServer ajouter une inteacutegration HTTP LoRaServer gt Applications gt myApplication gt

Integrations gt Create gt HTTP Integration et la configurer comme le montre la Figure 89 Vous

remplacerez eacutevidement le lien par votre propre Endpoints

Figure 89 Configuration de linteacutegration HTTP POST dans LoRaServer

En envoyant des trames LoRa depuis votre Device vous devriez voir les contenus JSON sur votre

Endpoint

722 Reacutecupeacuterer des donneacutees sur notre Application avec MQTT Nous allons nous connecter au Broker MQTT de LoRaServer Pour cela nous utiliserons la mecircme

meacutethode que celle que nous avons utiliseacute avec TTN au chapitre 628 Nous utiliserons MQTTBox

comme nous lavons deacutejagrave fait au paragraphe 627

Le Broker de LoRaServer a enregistreacute les Topics suivant

[applicationID] correspond au nom de votre Application

[devEUI] correspond au nom de votre Device LoRa

| 75

Deacutetail du Topic Nom du Topic [Donneacutees] Flux Uplink application[applicationID]device[devEUI]rx

[Donneacutees] Flux Downlink application[applicationID]device[devEUI]tx

[Status] Statut dun Device application[applicationID]device[devEUI]status

[Ack] Acquittement des messages application[applicationID]device[devEUI]ack

[Erreurs] Erreurs application[applicationID]device[devEUI]error

Tableau 13 Topics enregistreacutes dans LoRaServer

| 76

8 Creacuteation de notre propre Application

81 Utilisation de Node-RED

811 Preacutesentation Node-RED est un outil de programmation graphique qui permet de faire communiquer les

peacuteripheacuteriques mateacuteriels drsquoun systegraveme sans eacutecrire de code De nombreux protocoles sont aussi pris

en charge au travers de bloc ( Node) qursquoil suffit de connecter entre eux pour reacutealiser simplement

une application Il peut srsquoexeacutecuter localement sur un PC ou sur des cibles embarqueacutees telle qursquoune

Raspberry PI (RPI)

Dans les deacutemonstrations que nous mettrons en œuvre nous utiliserons une RPI Par soucis de

simpliciteacute nous utiliserons les derniegraveres versions de Raspbian (systegraveme drsquoexploitation de la RPI) qui

integravegre drsquoorigine Node-RED Il nrsquoy a donc tregraves peu de chose agrave mettre en place pour arriver agrave mettre

en place une Application Nous pouvons travailler soit directement sur la RPI agrave lrsquoaide drsquoune souris-

clavier mais il est recommandeacute de travailler agrave distance avec une connexion SSH

812 Mise en place de lrsquoenvironnement La mise en place de la RPI avec le systegraveme drsquoexploitation Raspbian a eacuteteacute preacutesenteacute au chapitre 721

Vous pouvez reprendre la mecircme installation ou repartir sur une nouvelle

Il est possible de faire en sorte que Node-RED se lance directement au deacutemarrage gracircce agrave la

commande sudo systemctl enable noderedservice

Sil nest pas actif lancer Node-RED sur votre RPI node-red-start

Nous nous connectons au Node-RED de la RPI via un navigateur web sur le port 1880 en tapant dans

la barre dURL httpIP_Raspeberry_PI1880 Ce nous permet darriver agrave la fenecirctre suivante

Figure 90 Page daccueil de Node-RED

Il est possible de sinterfacer avec TTN avec les Nodes deacutejagrave disponibles gracircce au protocole HTTP

POST ou MQTT Neacuteanmoins nous pouvons avantageusement installer deux librairies speacutecifiques

Une qui facilite linterfaccedilage avec TTN

Une qui facilite la mise en place dinterface graphique

Installation des Nodes TTN

cd $HOMEnode-red

npm install node-red-contrib-ttn

Installation de Dashboard (interface graphique)

| 77

cd $HOMEnode-red

npm install node-red-dashboard

Il peut ecirctre necessaire de redeacutemarrer Node-RED pour prendre en compte linstallation de nos deux

Nodes

-----------------------------------

sudo apt-get install npm

sudo npm install -g npm

hash -r

cd ~node-red

npm install node-red-example node name

------------------------------------

813 Creacuteer une Application speacutecifique pour TTN Nous allons commencer par geacuterer le flux Uplink Apporter sur votre scheacutema un Node ttn uplink et

un Node Debug puis relier les Le Node ttn uplink nous permettra de configurer la

communication avec TTN en MQTT Le Node debug eacutecrira sur le terminal les informations brutes

qui seront reccedilu par le Node ttn uplink

Figure 91 Visualisation des trame publieacutees par TTN sur notre client MQTT

Double cliquer sur le Node ttn uplink pour le configurer comme la figure suivante

Le champ Name sera le nom du Node sur votre scheacutema Le champ Device ID est le device LoRa

concerneacute dans votre application De plus il faut entrer les caracteacuteristiques de votre application (Add

new ttn app) pour que Node-RED puisse sy connecter

Figure 92 Configuration du node ttn uplink

Configuration de votre nouvelle application

| 78

Figure 93 Identifiant et mot de passe de notre application

AppID Nom de votre application Dans notre cas seminaire_lorawan

Access Key Comme nous lavons deacutejagrave expliqueacute plus tocirct l Access Key vous sera donneacutee

par lrsquoenseignant dans le cadre de ce test Si vous avez enregistreacute votre propre application

vous trouverez lrsquoAccess Key dans TTN gt Application gt Nom_de_votre_application gt

Overview

Le Node ttn uplink doit maintenant avoir le nom que vous avez configureacute Cliquer sur Deploy pour

lancer votre projet Le bloc ttn uplink doit maintenant ecirctre connecteacute agrave TTN Cela est speacutecifieacute

connected sous le bloc

Figure 94 Utilisation du Node TTN Uplink

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

Figure 95 Simulation de Uplink dans TTN

Vous devriez voir le reacutesultat dans la fenecirctre de Debug Par exemple pour le test denvoi de 31 32

correspondant au code ASCII des chiffres 1 et 2 vous devriez avoir la fenecirctre de Debug suivante

| 79

Figure 96 Reacutesultats obtenu dans la fenecirctre Debug apregraves la simulation dUplink

814 Creacuteation drsquoun Dashboard

Dans la mise en place de lenvironnement (chapitre 812) nous avons installeacute des Nodes

Dashboard qui vont nous permettre de reacutealiser une interface graphique tregraves simple et de la mettre

agrave disposition des utilisateurs via un des graphiques histogramme gauges afficheurshellip

Figure 97 Impleacutementation dune interface graphique dans Node RED

Linterface graphique que nous allons creacuteer sera constitueacutee donglet (tab) La mise en place des

composant se fait de la faccedilon suivante

Chaque eacuteleacutement graphique doit appartenir agrave un groupe de composant quil va falloir creacuteer

Chaque groupe de composant doit appartenir agrave un onglet (tab) quil va falloir creacuteer

Figure 98 Creacuteation dun groupe de composant

Figure 99 Creacuteation dun nouvel onglet dans le site web

Cliquer sur Deploy pour activer votre application

LURL pour joindre linterface graphique de votre site web est disponible sur ladresse

httpIP_Raspeberry_PI1880ui

Reacutealiser un test de communication gracircce agrave une simulation duplink comme nous lavons vu au

paragraphe 545 TTN gt Application gt Nom_de_votre_application gt Devices gt arduino0

| 80

Figure 100 Interface graphique du site web avec Node-RED

82 Programmation en PHP Maintenant que nous avons testeacute toute lrsquoarchitecture nous pouvons mettre en place une

application qui jouera deux rocircles

Un rocircle de Serveur HTTP POST reacutecupeacuterant les donneacutees en provenance de TTN

Un rocircle de Client HTTP POST qui geacuteneacuterera les requecirctes vers TTN

Un serveur web apache sur RPI heacuteberge cette application Linterface graphique du site web est

reacutealiseacute avec le template CSS proposeacute par Bootstrap [ httpsgetbootstrapcom ]

Figure 101 Architecture de notre application en PHP sur RPI

The Things Network

Notre Application

[ Serveur Apache sur Raspberry Pi ]

Requecircte (1 )

HTTP POST

[ Flux Uplink ]

Requecircte (2)

HTTP POST

[ Flux Downlink ]

| 81

Nous allons lrsquoutiliser telle quelle Elle est juste proposeacutee agrave titre dexemple Lrsquoobjectif de cette

application est de geacuteneacuterer une ouverture fermeture de ruche agrave distance dans le cadre de projets

eacutetudiants du Master Electronique et Systegravemes Embarqueacutes de lUSMB [ httpscem-esetuniv-

smbfr ]

Figure 102 Application permettant de recevoir et deacutemettre des requecirctes HTTP POST

Configurer TTN pour pointer vers votre nouveau serveur et tester le flux montant et

descendant

| 82

9 Versions du document

Version 10 02022019

Version initiale

Version 20 23022019

Ajout drsquoun paragraphe Les systegravemes embarqueacutes dans lrsquoIoT En introduction

Compleacutement et ameacutelioration Ameacutelioration exercice eacutetalement de spectre

Correction Cacircblage Arduino

Ajout drsquoun paragraphe Fonctionnement de lrsquoArduino et ajout de librairies

Compleacutement et ameacutelioration Couche physique LoRa Ajout de 4 figures pour lrsquoexplication

de la modulation Chirp

Ajout drsquoun paragraphe sur les acronymes utiliseacutes au deacutebut du cours TTN LoRa MQTThellip

Compleacutement drsquoinformations sur les dB et dBm

Ajout LoRa Calculator

Version 30 8032019

Ajout de figure sur le rocircle de la Gateway LoRa

Ajout de paragraphe authentification avec le Network Server

Ajout de paragraphe sur le chiffrement avec lrsquoApplication Server

Ajout drsquoun sommaire en deacutebut de cours

Ajout de 2 scheacutemas ABP et OTAA

Retrait explication du deacutetail de la laquo Join Request raquo en OTAA Trop complexe attente de

reacutealisation drsquoun scheacutema plus explicite

Ajout drsquoun scheacutema sur lrsquoattaque par REPLAY

Ajout de paragraphe des diffeacuterents reacuteseaux LoRaWAN existants Opeacutereacutes et Priveacutes

Ajout des scheacutemas des trames LoRaWAN Physique LoRa MAC Application

Compleacutement drsquoinformation sur les Classes de Devices

Ajout drsquoun paragraphe sur la Gateway utiliseacutee pour le Downlink

Ajout drsquoun paragraphe sur le JSON

Compleacutement drsquoinformation sur le codage en Base64

Ajout drsquoinformation dans le deacutecodage des trames LoRaWAN

Restructuration des explications sur lrsquoenvoi et la reacutecupeacuteration des donneacutees en HTTPMQTT

Version 40 8032019

Ajout drsquoun chapitre Creacuteation de notre propre Application

Ajout drsquoun chapitre Creacuteation de notre propre Network et Application Server

Ajout drsquoune figure Visualisation des Chirps LoRa par SDR (Radio Logicielle)

Compleacutements drsquoinformation sur MQTT

Compleacutements dinformation sur les Topics de TTN en MQTT

Page 18: Cours - Formation LoRa / LoRaWAN
Page 19: Cours - Formation LoRa / LoRaWAN
Page 20: Cours - Formation LoRa / LoRaWAN
Page 21: Cours - Formation LoRa / LoRaWAN
Page 22: Cours - Formation LoRa / LoRaWAN
Page 23: Cours - Formation LoRa / LoRaWAN
Page 24: Cours - Formation LoRa / LoRaWAN
Page 25: Cours - Formation LoRa / LoRaWAN
Page 26: Cours - Formation LoRa / LoRaWAN
Page 27: Cours - Formation LoRa / LoRaWAN
Page 28: Cours - Formation LoRa / LoRaWAN
Page 29: Cours - Formation LoRa / LoRaWAN
Page 30: Cours - Formation LoRa / LoRaWAN
Page 31: Cours - Formation LoRa / LoRaWAN
Page 32: Cours - Formation LoRa / LoRaWAN
Page 33: Cours - Formation LoRa / LoRaWAN
Page 34: Cours - Formation LoRa / LoRaWAN
Page 35: Cours - Formation LoRa / LoRaWAN
Page 36: Cours - Formation LoRa / LoRaWAN
Page 37: Cours - Formation LoRa / LoRaWAN
Page 38: Cours - Formation LoRa / LoRaWAN
Page 39: Cours - Formation LoRa / LoRaWAN
Page 40: Cours - Formation LoRa / LoRaWAN
Page 41: Cours - Formation LoRa / LoRaWAN
Page 42: Cours - Formation LoRa / LoRaWAN
Page 43: Cours - Formation LoRa / LoRaWAN
Page 44: Cours - Formation LoRa / LoRaWAN
Page 45: Cours - Formation LoRa / LoRaWAN
Page 46: Cours - Formation LoRa / LoRaWAN
Page 47: Cours - Formation LoRa / LoRaWAN
Page 48: Cours - Formation LoRa / LoRaWAN
Page 49: Cours - Formation LoRa / LoRaWAN
Page 50: Cours - Formation LoRa / LoRaWAN
Page 51: Cours - Formation LoRa / LoRaWAN
Page 52: Cours - Formation LoRa / LoRaWAN
Page 53: Cours - Formation LoRa / LoRaWAN
Page 54: Cours - Formation LoRa / LoRaWAN
Page 55: Cours - Formation LoRa / LoRaWAN
Page 56: Cours - Formation LoRa / LoRaWAN
Page 57: Cours - Formation LoRa / LoRaWAN
Page 58: Cours - Formation LoRa / LoRaWAN
Page 59: Cours - Formation LoRa / LoRaWAN
Page 60: Cours - Formation LoRa / LoRaWAN
Page 61: Cours - Formation LoRa / LoRaWAN
Page 62: Cours - Formation LoRa / LoRaWAN
Page 63: Cours - Formation LoRa / LoRaWAN
Page 64: Cours - Formation LoRa / LoRaWAN
Page 65: Cours - Formation LoRa / LoRaWAN
Page 66: Cours - Formation LoRa / LoRaWAN
Page 67: Cours - Formation LoRa / LoRaWAN
Page 68: Cours - Formation LoRa / LoRaWAN
Page 69: Cours - Formation LoRa / LoRaWAN
Page 70: Cours - Formation LoRa / LoRaWAN
Page 71: Cours - Formation LoRa / LoRaWAN
Page 72: Cours - Formation LoRa / LoRaWAN
Page 73: Cours - Formation LoRa / LoRaWAN
Page 74: Cours - Formation LoRa / LoRaWAN
Page 75: Cours - Formation LoRa / LoRaWAN
Page 76: Cours - Formation LoRa / LoRaWAN
Page 77: Cours - Formation LoRa / LoRaWAN
Page 78: Cours - Formation LoRa / LoRaWAN
Page 79: Cours - Formation LoRa / LoRaWAN
Page 80: Cours - Formation LoRa / LoRaWAN
Page 81: Cours - Formation LoRa / LoRaWAN
Page 82: Cours - Formation LoRa / LoRaWAN