Proof of Coverage LoRaWAN pour TTN, CampusIoT et Helium

From air
Jump to navigation Jump to search

Encadrants: Didier Donsez, Olivier Alphand.

L’Internet des objets (IoD, en anglais Internet of things, IoT) représente l’extension d’Internet à des choses et à des lieux du monde physique. L’objet connecté à Internet est identifié par le réseau de manière unique comme l’est un ordinateur relié à Internet. L’objet connecté embarque l’intelligence nécessaire pour générer des données (paramètres de fonctionnement, données d’usage, mesures physiques de son environnement, etc.), en capter de son environnement et les transférer automatiquement sur le réseau. A l’autre bout, une plateforme informatique centralise et traite les données collectées et gère les services à valeur ajoutée créés de l’exploitation des historiques des mesures collectées au cours du temps. Les domaines d’application de l’Internet des objets couvrent des pans entiers d’activités (e-santé, e-inclusion, sport connecté, ville connectée, usine du futur, agriculture de précision, gestion des risques naturelles et industrielles, smart office, smart building, logistique, déplacement doux, etc.). L’internet des objets est considéré comme la troisième évolution du Web.

La technologie de communication sans-fil LoRa/LoRaWAN permet de transmettre des données à plusieurs kilomètres de distance entre un objet connecté et un réseau de passerelles (appelé aussi station de base). LoRaWAN permet de bâtir aussi bien des réseaux IoD publics (Orange, Objenious, Helium, TheThingsNetwork) ou privés (comme CampusIoT, le réseau de l'Université Grenoble Alpes). Une station qui sera enregistrée sur ces 4 réseaux sera la mission cubesat Thingsat qui a été mis en orbite en Janvier 2022. A noter, Helium rétribue les propriétaires de hotspots (aka stations) au moyen de la crypto-monnaie HNT.

La preuve de couverture (Proof of Coverage) LoRaWAN permet à un réseau LoRaWAN de connaître (et donc prouver) le voisinage d'une station en envoyant depuis une station un message d'un endpoint (activation ABP) représentant la station. L'analyse des messages dupliqués reçus permet d'établir une cartographie "sure" des stations afin de confirmer la localisation "réelle" des stations.

LoRaWAN Proof Of Coverage


L'objectif du projet est :

  • d'analyser et visualiser la qualité des liens radio (RSSI,SNR,ESP) entre les stations LoRa en fonction de leur éloignement.
  • de visualiser la cartographie des stations fixes et mobiles (avec Python, GeoJSON, Leaflet) à la TTNMapper, Kepler.gl ou Helium Mapper.
  • de détecter les anomalies de positionnement des stations (la position enregistrée par son propriétaire peut être fausse).

Point de départ:

  • Jeu de données des messages LoRa de "preuve de couverture" envoyées vers les stations LoRa de CampusIoT et de TTN (~1000000 messages pour une vingtaine de stations depuis Juillet 2021).
  • Scripts Bash et NodeJS pour préparer, enrichir, filtrer et convertir le jeu de données (qui est au format JSON).
  • Notebook Jupyter préliminaire pour analyser les données.
  • (optionnel) Scripts Bash et NodeJS permettant de construire des messages du endpoint représentant la station et de les envoyer via la station.


Exemple de visualisation avec Kepler.gl KeplerGL PoCov.png


Exemple de message reçu par les stations du réseau CampusIoT :

{
  "applicationID": "152",
  "applicationName": "PROOF_OF_COVERAGE",
  "deviceName": "POC_0000024b080603a3",
  "devEUI": "0000024b080603a3",
  "rxInfo": [
    {
      "gatewayID": "0000024b080603a3",
      "uplinkID": "0a83784a-c9ee-4c19-9414-e8caacf47f35",
      "name": "KER112_SAINTEYNARD",
      "time": "2021-09-01T09:02:31.927012Z",
      "rssi": -118,
      "loRaSNR": 6.5,
      "location": {
        "latitude": 45.2351,
        "longitude": 5.7617,
        "altitude": 1344
      }
    },
    {
      "gatewayID": "7076ff00560504ff",
      "uplinkID": "62ddad1f-c07c-47e7-854c-deeebc5ebd13",
      "name": "ISTATION_0504FF_IUT1_GAMBETTA",
      "rssi": -94,
      "loRaSNR": 9.5,
      "location": {
        "latitude": 45.185829162597656,
        "longitude": 5.725697994232178,
        "altitude": 230
      }
    },
    {
      "gatewayID": "7076ff00560502f3",
      "uplinkID": "fbaaeef9-4338-4971-9b7e-c3b316d45a1e",
      "name": "ISTATION_0502F3_MAIRIE",
      "rssi": -119,
      "loRaSNR": -9,
      "location": {
        "latitude": 44.9,
        "longitude": 5.78,
        "altitude": 906
      }
    },
    {
      "gatewayID": "7276ff0039030724",
      "uplinkID": "0f0486ba-2049-4e30-a10f-02b7a175f4f6",
      "name": "KER_FEMTO_030724_P124",
      "time": "2021-08-30T11:00:20Z",
      "rssi": -113,
      "loRaSNR": 9.2,
      "location": {
        "latitude": 45.18424498325449,
        "longitude": 5.75310230255127,
        "altitude": 220
      }
    },
    {
      "gatewayID": "7276ff0039030716",
      "uplinkID": "ae7f6125-d61a-4575-83e4-b4b08ddac10b",
      "name": "KER_FEMTO_030716_P307",
      "time": "2021-07-16T08:09:52Z",
      "rssi": -113,
      "loRaSNR": -13,
      "location": {
        "latitude": 45.18439622301354,
        "longitude": 5.753231048583985,
        "altitude": 220
      }

      ...
      
    }
  ],
  "txInfo": {
    "frequency": 868500000,
    "dr": 1
  },
  "adr": false,
  "fCnt": 31746,
  "fPort": 10,
  "data": "owMGCEsCAAD5Sg4=",
  "object": {
    "gweui": "0000024b080603a3",
    "token": 63818,
    "txpower": 14
  }
}



Exemple de message reçu par les hotspots (aka stations) du réseau Helium :

{
  "app_eui": "6081F9712348BD12",
  "decoded": {
    "payload": {
      "gweui": "0000024b08060211",
      "token": 8810,
      "txpower": 14
    },
    "status": "success"
  },
  "dev_eui": "6081F9712348BD12",
  "devaddr": "58010021",
  "fcnt": 158,
  "hotspots": [
    {
      "channel": 2,
      "frequency": 868.5,
      "hold_time": 668,
      "id": "11YDbuzxogP71vqieSq7Xv5jYnbFkbtPtvjGjTCQgj2xN7LLYuQ",
      "lat": 45.19,
      "long": 5.71,
      "name": "clever-strawberry-frog",
      "reported_at": 1630699263694,
      "rssi": -102,
      "snr": -15,
      "spreading": "SF12BW125",
      "status": "success"
    }
  ],
  "name": "POC",
  "payload": "EQIGCEsCAAAiag4=",
  "payload_size": 11,
  "port": 10,
  "reported_at": 1630699263694,
  "uuid": "a42be9d3-fa54-4578-93d7-edbd6fefcb12"
}