Chirpstack

De Wikitechnia
Aller à la navigation Aller à la recherche

Chirpstack (anciennement LoRa Server) est un network server LoRaWAN open source distribué sous licence MIT.

Ecrit en Rust depuis sa version 4, il est un des outils les plus robustes et les plus utilisés du marché.

Architecture

Chirpstack fonctionne avec plusieurs composants, ce qui permet de l'installer sous forme d'une architecture micro-services, et donc de faire de la scalaibilité horizontale.

Les composants principaux du systèmes sont les suivants :

  • Chirpstack en lui-même.
  • Une base de données PostegreSQL permettant de stocker les données du parc des tenants, des utilisateurs et des applications.
  • Une base de données à faible latente REDIS, où sont notamment stockées les clefs de sessions, utilisées pour décrypter chaque message reçu.
  • Un broker MQTT (par défaut Mosquitto).
  • Des agents (appelés gateway bridge ou MQTT Packet Forwarder) , installés sur les gateways selon les marques et modèles ou sur le serveur.

Organisation des données

Chirpstack est multi-tenant.

Les capteurs et objets sont regroupés dans des Applications. Tous les objets placés dans une même application partagent les mêmes intégrations.

Communication avec les gateways

Plusieurs modes de communication permettent aux gateway de dialoguer avec le network server.

Communication UDP, agent installé côté serveur

Le gateway bridge ou le MQTT Packer Forwarder est installé côté serveur. L'ensemble des gateways envoie alors ses données au travers du protocole UDP (Semtech Packer Forwarder ou Basic Station) jusqu'au serveur, puis l'agent envoie les données au network server à travers MQTT (si l'agent est installé sur le même serveur que le network server, TLS n'est pas requis).

Avantages

Cette configuration ne nécessite pas l'installation de l'agent sur les gateways. Elle est très simple à mettre en oeuvre, il suffit simplement de faire pointer l'url du Packet Forwarder vers le serveur.

Inconvénients

La communication UDP n'est pas entièrement sécurisée. Bien que les packets soient nativement cryptés en AES128, comme tous les messages LoRaWAN, certaines informations seront visibles, ouvrant ainsi la porte à du spoofing de gateways. C'est pourquoi cette configuration est déconseillée en production.

Communication MQTT, agent installé côté gateway

Le gateway bridge ou le MQTT Packer Forwarder est installé sur les gateways. La communication entre les gateways et le network server est alors effectué à travers le protocole MQTT. Il est impératif de configurer MQTT sur TLS, afin d'assurer l'intégrité et la sécurité des données. L'authentification se fait par certificats, qui sont générés dans le menu gateway de l'interface de Chirpstack.

Avantages

Cette configuration est la plus adaptée à la production :

  • Elle permet un contrôle fin des données envoyées, notamment grâce au filtrage par NetID ou DevId des paquets, qui peut limiter la consommation de données, notamment lorsqu'une liaison 3/4/5G ou LTE-M est utilisée.
  • Elle offre un niveau de sécurité important pour la communication entre les gateways et le network server.

Inconvénients

La configuration et l'installation des agents sur les gateways est un travail d'expert qui peut être également très consommateur de temps s'il n'est pas automatisé.

Communication mixte

Il est possible de créer des réseaux mixtes, où certaines Gateway utilisent leur propre agent, et où d'autres communiquent en UDP.

Intégration avec des services tiers

Chirpstack offre plusieurs possibilités pour pousser les données vers des systèmes tiers (on parle parfois de serveurs applicatifs).

Push HTTP (webhook)

Les données sont poussées vers une ou plusieurs URL configurable dans l'interface. Il est également possible de définir un header personnalisé, par exemple pour entrer une clef API.

MQTTS

Les systèmes tiers peuvent se connecter à Chirpstack à l'aide d'un client MQTT. Pour se faire, il faut télécharger les certificats dans l'interface, puis les saisir dans le système qui souhaite se connecter. Un certificat est valable uniquement pour une Application donnée.

AWS SNS

Azure Service-Bus

GCP Pub/Sub

IFTTT

InfluxDB

myDevices

Pilot Things

Semtech LoRa Cloud™

ThingsBoard

Ressources