Comment nous procédons : IoT hors ligne

Actualités de de l'Intelligence Artificielle - Machine Learning - Objets connectés

Comment nous procédons : IoT hors ligne


Un réseau maillé sans fil connecte de manière fiable les appareils IoT (Internet des objets), même dans les endroits où le sans fil est difficile.

Mais même avec un réseau maillé sans fil, les appareils IoT peuvent se déconnecter.

Nous devons ensuite stocker leurs données hors ligne et leur faire publier automatiquement leurs données lorsqu’ils reviennent en ligne.

Dans un récent projet client, des capteurs ont été déployés au fond de congélateurs pour surveiller les vaccins.

Les murs des congélateurs bloquaient parfois les signaux sans fil. Nous devions donc stocker les données lorsque les appareils étaient hors ligne et envoyer automatiquement les données lorsque les appareils étaient à nouveau accessibles.

Avec la plate-forme Thingsquare IoT, nous utilisons les mécanismes de mise en mémoire tampon hors ligne intégrés pour ce faire.

Aujourd’hui, nous allons voir en détail comment nous construisons des solutions qui fonctionnent même si le réseau maillé sans fil n’est pas toujours disponible.

Pourquoi l’IoT hors ligne ?

Les systèmes IoT sont presque toujours en ligne. Les appareils peuvent directement publier leurs données sur le réseau maillé sans fil dès qu’ils les reçoivent.

Mais que faire si le réseau n’est pas disponible ?

Cela peut se produire lorsqu’un point d’accès a une connexion cellulaire irrégulière à Internet.

Ou si les appareils eux-mêmes sont placés dans des endroits où leur connexion sans fil est inégale.

Dans le scénario de notre client, des capteurs sans fil ont été utilisés pour surveiller les vaccins. Ces vaccins sont stockés dans des congélateurs, au fond des bâtiments.

Les capteurs sont connectés dans un réseau maillé sans fil, ce qui permet de maintenir une bonne connectivité. Puisqu’il s’agit d’un réseau maillé, les nœuds relais étendent la portée du réseau. Mais même avec un réseau maillé, les appareils peuvent temporairement être hors de portée.

Alors que faire?

Entrez en mode hors ligne.

Avec le mode hors ligne, les appareils stockent leurs données localement. Si l’appareil est en ligne, il enverra immédiatement ses données à la base de données du serveur principal.

Mais s’il est hors ligne, le stockage de données local conservera les données aussi longtemps que nécessaire. Jusqu’à la prochaine fois que l’appareil est de nouveau en ligne.

Même quelque chose d’aussi fiable qu’un réseau maillé IoT sans fil peut se briser. C’est à ce moment que nous activons le mode hors ligne.

Défis avec l’IoT hors ligne

Les appareils sans fil sont alimentés par batterie et petits.

A l’intérieur de chaque appareil se trouve un microprocesseur et une puce mémoire. Le microprocesseur (comme le CC1352R) ne peut contenir que des données temporaires. Ces données disparaîtront si la batterie meurt.

Les données hors ligne doivent entrer dans la puce mémoire.

Les puces mémoire pour cette classe d’appareils peuvent contenir quelques mégaoctets de données. Un tel exemple est le MX25U1633FM2I03 NI-puce flash. Il a une capacité de 2 mégaoctets et un prix d’environ 37 cents américains.

Certaines parties de la puce de mémoire externe sont réservées à l’Over-The-Air (OTA) mises à jour, généralement environ 400 Ko, mais la majeure partie de la puce est disponible pour les données hors ligne.

En principe, c’est simple. Mais le diable est dans les détails. Nous devons gérer :

  • Horodatages de données synchronisés.
  • Sérialisation et désérialisation des données.
  • Protégez-vous contre la corruption des données.
  • Expiration des données.
  • Cryptage au repos.
  • Rythme des données pour éviter de surcharger le réseau lorsque de nombreux appareils se connectent simultanément.

Heureusement, le système Thingsquare nous y aide.

Comment la plateforme IoT Thingsquare vous aide

Le système Thingsquare est conçu pour créer des solutions IoT complètes et comprend des outils pour le traitement hors ligne.

Les données hors ligne sont horodatées, additionnées de contrôle, chiffrées et stockées dans la puce flash externe.

Lorsque l’appareil est de nouveau en ligne dans le réseau maillé sans fil, les données sont envoyées au serveur pièce par pièce. Ceci est géré avec élégance et fiabilité afin que le réseau ne soit pas submergé et garantit qu’aucune donnée n’est perdue.

Même si l’appareil était éteint au milieu d’un transfert, le système reprend là où il s’était arrêté lorsqu’il est rallumé.

Les données étant horodatées, le serveur les insère dans l’historique des données à l’endroit correspondant.

Le résultat est un historique des données sans lacunes, comme si l’appareil avait été en ligne tout le temps.


Pour démontrer le mode hors ligne, nous construisons une petite solution IoT personnalisée, basée sur du matériel standard.

Exemple : Une solution IoT personnalisée

Pour illustrer le fonctionnement du mode hors ligne, nous construisons une solution IoT miniature et simple. Nous utilisons du matériel standard et la plateforme Thingsquare IoT.

Dans la plate-forme Thingsquare, chaque solution IoT a un matériel et des logiciels différents.

En général, lorsque nous construisons une solution IoT, les experts de Thingsquare développent le logiciel pour répondre aux besoins du projet, et le code source de la solution est mis à disposition du client.

Les appareils sont programmés dans le langage de programmation C. Dans cet article, nous montrons les instructions de code C exactes qu’un périphérique exécutera pour fonctionner en mode hors connexion.

Dans cet exemple, c’est exactement ce que nous faisons. Mais à une échelle beaucoup plus petite.

Nous utilisons les Texas Instruments CC1352R-basé LPSTK. Il s’agit d’une plate-forme de démonstration sans fil sub-GHz alimentée par batterie avec des capteurs : température, humidité relative de l’air, pression atmosphérique et lumière ambiante.

Nous développons une application personnalisée qui échantillonne périodiquement les capteurs. Les données sont transmises au serveur ou stockées dans la puce flash externe si nous sommes hors ligne.

Étape 1 : Définir les données

Dans le système Thingsquare et son mode hors ligne, les données sont stockées dans des files d’attente. Chaque file d’attente a sa propre structure de données.

Nous définissons d’abord la structure des données.

Nous le faisons avec un langage C struct définition.

Dans cet exemple, le même format peut être utilisé pour toutes les données que nous voulons stocker, à la fois la tension de la batterie et l’humidité relative, donc la même file d’attente et la même structure avec un simple float est utilisé pour tous.

Des compositions plus complexes sont bien entendu possibles, et comportant plusieurs files d’attente avec leur format respectif.

struct queue_data {
  float value;
};

Étape 2 : Définition de la file d’attente de données

Ensuite, nous définissons la file d’attente et l’espace que nous utiliserons dans la mémoire flash externe. Ici, nous allouons 32 Ko pour cette file d’attente.

#define STARTPAGE  0
#define PAGES      4

THSQ_XMEM_QUEUE(data_queue,
                struct queue_data,
                send_queue_callback,
                STARTPAGE, PAGES);

Les data_queue est le nom de notre variable C. Les struct queue_data est la structure de données que nous avons définie ci-dessus. Les send_queue_callback est une fonction C que nous définissons ci-dessous. STARTPAGE et PAGES définir la quantité de mémoire flash que nous voulons consacrer à cette file d’attente.

Étape 3 : Le code qui envoie les données

Ensuite, nous définissons le send_queue_callback fonction. Ceci est invoqué lorsqu’un point de données est envoyé au serveur et nous permet de définir le format des données telles qu’elles sont envoyées au serveur. Dans le code ci-dessous, printfloat() imprime un flottant dans un tampon.

static enum thsq_err
send_queue_callback(struct thsq_xmem_queue *q, uint32_t timestamp, const char *key, void *data)
{
  
  struct queue_data *queue_data = (struct queue_data *)data;

  char valuestr[16];
  printfloat(valuestr, sizeof(valuestr), queue_data->value);
  return thsq_sset_printf_important_timestamp(timestamp, key, "%s", valuestr);
}

Étape 4 : Le code qui met les données en file d’attente

Pour ajouter des points de données à notre file d’attente, nous utilisons une petite routine d’assistance.

static void
enqueue_data(const char *variable, float value)
{
  struct queue_data d;
  d.value = value;
  thsq_xmem_queue_add(&data_queue, variable, &d);
}

Cette fonction est appelée à chaque fois que nous voulons pousser des données vers la file d’attente.

Étape 5 : Encliquetage des données

Lorsqu’il est temps d’ajouter des données à la file d’attente, nous procédons comme l’exemple ci-dessous pour le HDC2010 capteur d’humidité relative et de température. Étant donné que le capteur renvoie des résultats mis à l’échelle à virgule fixe, nous réduisons à nouveau l’unité SI appropriée et stockons en tant que flottant.

hdc20x0_data_t hdc_result;
hdc20x0_read(&hdc_result);
enqueue_data("rh", (float)hdc_result.rh / 100.0);
enqueue_data("t", (float)hdc_result.temp / 100.0);

Étape 6 : Faire semblant d’être hors ligne

Pour tester le fonctionnement hors ligne, nous devons faire semblant d’être hors ligne.

Nous utilisons le bouton embarqué sur le LPSTK appareil pour faire passer l’appareil d’un appareil en ligne à un appareil hors ligne.

C’est le code :

static void
callback_thsq(enum thsq_reason r, const char *msg, int num)
{
  if(r == THSQ_PERIOD) {
    
    process_poll(&sensor_read_process);
  }

  if(r == THSQ_BUTTONACTION) {
    if(num == 2) {
      should_be_offline = !should_be_offline;
      process_poll(&offline_scheduler_process);
    }
  }
}

L’essayer

Pour essayer les choses, nous pouvons maintenant exécuter l’installation en mode hors ligne pendant quelques jours.

Nous utilisons l’interface Web par défaut de Thingsquare pour afficher les données que le LPSTK génère.

Pour le tester, je double-clique simplement sur le bouton et je vois le LED vérification qu’il est en mode hors ligne. Il est ensuite transporté dans un endroit que je veux avoir un aperçu.

Les LPSTK est récupéré une semaine plus tard. Après un deuxième double-clic, il se remet en ligne et commence à décharger les données de la semaine dernière sur le serveur. L’espace dans la mémoire flash externe est récupéré car point de données par point de données est reconnu.

Après un certain temps, nous pouvons voir l’historique des données de la semaine dernière à l’aide de l’application ou de l’interface Web.

Nous avons ainsi activé la collecte de données dans un endroit éloigné où aucune couverture n’était disponible. Il permet à un produit d’être temporairement déployé sans configurer l’infrastructure de support.

À ton tour

Souhaitez-vous en savoir plus sur la façon dont Thingsquare peut aider votre produit à prendre vie ? S’il vous plaît contactez-nous, nous sommes impatients de vous parler. Si vous le préférez, n’hésitez pas à utiliser le planificateur de solutions IoT pour obtenir une estimation automatisée du temps et des coûts.