Tutoriel : Débuter avec The Things Network

ttn
page en construction

Synopsis

L’objectif de ce tutoriel est de prendre en main la pile réseau LoRaWAN open source nommée “The Things Stack v3” utilisée sur le réseau communautaire The Things Network pour mettre en œuvre une application IoT (Internet of Things) .

L’application IoT visée consiste simplement à échanger des données, via LoRaWAN, entre 1 nœud LoRa et un client MQTT. Celle-ci est représentée schématiquement ci-dessous :

synoptique getting started
  1. On utilisera un émulateur de terminal série pour interagir avec le nœud LoRa à l’aide de commandes de type AT. Ces commandes permettront de le configurer , joindre la passerelle LoRa et lui envoyer des données arbitraires (→ payload LoRa) qui seront ensuite relayées au serveur réseau LoRaWAN de “The Things Stack v3”.

    2 types de nœud seront utilisés de façon à illustrer 2 façons d’enregistrer un nœud LoRa dans une application “The Things Stack v3”.

  2. Le serveur réseau LoRaWAN traitera ce payload LoRa — via un morceau de code Javascript appelé “payload formatter” — afin de le transcrire dans un message au format JSON

  3. Ce message JSON sera ensuite délivré sur le client MQTT ayant souscrit aux publications de données provenant du nœud LoRa considéré

  4. Le client MQTT sera utilisé dans un 2ème temps pour renvoyer des données sur le serveur réseau LoRaWAN

  5. Ces données seront décodées via un “payload formatter” dédié du serveur réseau LoRaWAN

  6. Les données décodées seront enfin envoyées — sour forme d’un payload LoRa — sur le nœud LoRa en transitant par la passerelle

Résumé de la procédure à suivre

Les étapes à suivre pour parvenir à réaliser ce qui vient d’être décrit consistent à :

  1. Créer un compte utilisateur sur The Things Network

  2. Enregistrer la passerelle sur “The Things Stack v3

  3. Créer une application sur “The Things Stack v3

  4. Enregistrer le(s) nœud(s) Lora au niveau de l’application

  5. Coder le programme de communication intégré au noeud LoRa

  6. Souscrire aux publications (→ topics MQTT) des nœuds LoRa au niveau du client MQTT

  7. Coder le payload formatter de l’application “The Things Stack v3” pour transcrire en JSON le payload LoRa envoyé par le nœud LoRa

  8. Envoyer des données depuis le nœud LoRa et constater leur bonne réception sur le client MQTT

  9. Coder le payload formatter de l’application “The Things Stack v3” pour transcrire en payload LoRa le message JSON envoyé par le client MQTT

  10. Envoyer un message JSON depuis le client MQTT et constater sa bonne réception sur le nœud LoRa

Procédure détaillée

✓ Création de compte sur The Things Network

  1. Se rendrehttps://account.thethingsnetwork.org/register[Create an account link^] et remplir le formulaire.

[Optionnel] Enregistrement de la passerelle LoRa sur “The Things Stack v3

  1. Se rendre sur la console d’administration web de The Things Network accessible sur The Things Network Cluster Picker link après avoir choisi la région “Europe 1” (ou directement sur https://eu1.cloud.thethings.network/console/ link)

    Il existe une version en ligne de commande locale de la console d’administration The Things Network.

    Voir Command-line Interface link pour plus de détails.

  2. Sélectionner l’onglet “gateways” puis le bouton + Add gateway

  3. Saisir les informations d’enregistrement de la passerelle.

    Exemple
    ttn add gateway
  4. Une fois enregistrée, se rendre dans la rubrique de la passerelle et créer une clé d’API avec les droits Link as Gateway to a Gateway Server for traffic exchange, i.e. write uplink and read downlink

    ttn register api key
  5. Copier la clé et la sauvegarder dans un endroit sûr comme recommandé dans la boîte de dialogue qui s’affiche suite à la création de la clé d’API

    ttn api key warning

    Pour mémoire, la valeur de la clé d’API générée pour enregistrer sur The Things Network la passerelle nommée “sn-lab-ttn-v3” est :

    NNSXS.QXPXR2NKPC7BZAWZCE5RYDKUBAC4X25IMLQQQHQBINLVMMYVYYTA45J7SSQLI3VX266K5SFIK6ZSMUKJNVQRDSOHDIA

    Pour mémoire, la clé d’API générée pour enregistrer sur The Things Network la passerelle nommée “ciel-lab-ttn-v3” est :

    nom : link-api-key valeur : NNSXS.4XJKSV3C7O57T5TA3ESZS72SMUBU36KPFZS3BWQ.DUFFQM6JBGQGXQCRIU5O4PVJWIA5CDYG3FDA2CTB75S73YN6Q7EA

    Celle pour la passerelle nommée “sicom-ceri-ttn” est :

    NNSXS.RBCPB6IGCUZRQOP5TA7QTZML226WBNSLUXOB53I.4U5LGQOT76NM6LDKPEIBEIEHIORXXTGX2Y7436TZVARRPTBPTBHQ

Connecter la passerelle LoRa au réseau The Things Network

  1. Faire un reset de la passerelle à l’aide du bouton situé sous le couvercle

  2. Se connecter sur le point d’accès WiFi de la passerelle (→ SSID : “Things-Gateway-<adresse MAC interface WiFi>” / Clé WPA : “thethings”)

    Les adresses MAC de ses interfaces réseau sont :

    • Interface WiFi : 00:1E:C0:40:2A:69 (→ Microchip Technology Inc.)

    • Interface filaire : 54:10:EC:10:E8:B9 (→ Microchip Technology Inc.)

    • Il est également possible d’utiliser une passerelle Multitech Conduit link.

      Cependant, il faudra d’abord la configurer — pour être reconnue par The Things Network — en suivant la procédure : Connect Multitech Conduit with UDP Packet Forwarder link

      Cette procédure est moins à jour que celle expliquée sur Connect Multitech Conduit with LoRa Basics™ Station link mais est adaptée au firmware présent dans la passerelle en notre possession (→ MTCDT-246A Firmware 1.6.4)

  3. Se rendre sur l’interface web de configuration de la passerelle (→ http://192.168.84.1 link)

  4. Saisir les informations requises pour permettre à la passerelle de se connecter au réseau The Things Network

    ttn gw config
  5. Appliquer la configuration

  6. Vérifier la réussite du test lancé automatiquement et qui consiste à joindre le réseau The Things Network pour envoyer — depuis la passerelle — un 1er message

    La signification de l’état des DELs de la passerelle est précisé sur Status LEDs link

✓ Création de l’application “The Things Stack v3

  1. Créer une application The Things Network via le bouton + Add application] de l’onglet “Applications” de la console The Things Network link

    Il faut voir une application The Things Network comme le destinataire des messages envoyés par les nœuds LoRa.

✓ Enregistrement d’un nœud Lora au niveau de l’application “The Things Stack v3

  1. Toujours depuis la console The Things Network, enregistrer dans l’application créée le ou les nœuds Lora devant communiquer avec elle depuis le menu “Applications  application ID  End devices  + Add end device

    Il faut alors renseigner — ou laisser générer automatiquement par The Things Network — l’identifiant du nœud (→ Dev EUI, un peu l’équivalent d’une adresse MAC mais sur 8 octets) et la clé d’application (→ App Key, sur 16 octets).

    Le Dev EUI peut, selon le constructeur, être imposé (comme l’adresse MAC d’une carte réseau) mais il est bien souvent modifiable par programme.

✓ Codage du programme du noeud LoRa

  1. Coder le programme de chacun des nœuds LoRa — en y intégrant les identifiants/clés générés à l’étape précédente — de façon à ce que ceux-ci émettent régulièrement (mais en veillant à respecter le duty cycle link) les informations à traiter par l’application utilisant The Things Network

✓ Souscription MQTT aux publications des nœuds LoRa

Paramétrage client MQTT

  • Broker Address : eu1.cloud.thethings.network

  • User Credentials

    • User Name : <Application ID>@ttn (ex.: tuto-ttn@ttn)

    • Password :

      1. Aller dans Applications  tuto-ttn  integrations  MQTT puis cliquer sur “Generate API Key”

      2. Copier la clé générée (ex.: NNSXS.DFQH6E2B2FJ54OKLKNYSVB4CVPMLCVOYEFVWRQY.34J6KRWBSBQRIEK5SW5P2Y6LXRNW42CJUCBWUG2KI7LFJAPT6UJQ)

      3. Coller cette clé dans le champ password du client MQTT

  • Topic de souscription : v3/<Application ID>@ttn/devices/<Device ID>/up (ex. : v3/test-app-cdefrance@ttn/devices/multitech-mdot-01/up)

voir : MQTT Server

  • Topic de publication : v3/<Application ID>@ttn/devices/<Device ID>/down/push (ex. : v3/test-app-cdefrance@ttn/devices/multitech-mdot-01/down/push)

☠ Contenu ancien site pour version 2 de TTN à recycler ☠
  1. Exploiter les informations récoltées par l’application The Things Network soit en récupérant les données avec un client MQTT (→ client MQTT.fx link, programme Qt, utilitaire mosquitto_sub link qui accompagne le broker Mosquitto link), soit, directement, depuis ce que The Things Network appelle une integration link

    Paramétrage MQTT
    • Host: <Region>.thethings.network, where <Region> is last part of the handler you registered your application to, e.g. eu.

    • Port: 1883, or 8883 for TLS

    • For TLS, the server uses a Let’s Encrypt certificate. If your server does not trust that yet, you might want to include the Let’s Encrypt Roots in your certificate chain. Alternatively you can use our PEM-encoded CA certificate, which includes those roots as well: mqtt-ca.pem

    • Username: Application ID

    • Password: Application Access Key

    • Uplink Messages Topic : <AppID>/devices/<DevID>/up

    • Downlink Messages Topic : <AppID>/devices/<DevID>/down

    L'Application ID et l'Application Access Key sont à récupérer depuis la console d’administration dans les rubriques Application Overview et Access Keys

Pour plus de détails consulter l’article Réseau The Things Network link de M.Silanus.

=== Décoder le payload LoRa dans une application The Things Network

Lorsqu’on crée une application sur The Things Network, la plateforme met à notre disposition une fonction qui nous permet de décoder le tableau d’octets transmis dans la charge utile d’un message LoRa (→ payload) et le convertir en un objet JavaScript (ex. : JSON).

L’édition de cette fonction — appelée decoder — est réalisée,depuis la console The Things Network, dans l’onglet Payload Formats du panneau de configuration de l’application.

Cette fonction doit être codée en Javascript dans sa version ES5.1 (→ ECMAScript 5.1).

Le fait que The Things Network ne prenne en charge que la version ES5.1 de Javascript interdit d’utiliser les fonctionnalités de la version ES6 comme les TypedArray link ou les Fonctions fléchées link.

🕮 Sources :

Exemple de décodage d’un nombre flottant codé en IEE754 simple précision (32 bits)
function Decoder(bytes, port) {
  var decoded = {};
  if (port === 1) {
    var bits = (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | (bytes[3]);
    var sign = ((bits >>> 31) === 0) ? 1.0 : -1.0;
    var e = ((bits >>> 23) & 0xff);
    var m = (e === 0) ? (bits & 0x7fffff) << 1 : (bits & 0x7fffff) | 0x800000;
    var f = sign * m * Math.pow(2, e - 150);
    console.log(f);
    decoded.valeur_numerique = f;
    decoded.valeur_chaine = f.toString();
  }
  return decoded;
}
decoder example

Ressources

🞄  🞄  🞄