Un routeur 4G en tant que serveur universel pour l'IoT

Un routeur 4G en tant que serveur universel pour l'IoT
Les routeurs de la série ICR-3200 sont conçus pour remplacer l'association classique : ordinateur à carte unique + modem + routeur. Il est désormais possible d'exécuter toute la logique nécessaire directement sur le routeur. Grâce à un puissant processeur ARM, 512 Mo de RAM et environ 2 Go de mémoire flash intégrée, il est même possible d'exécuter un serveur Node.js sur le routeur !

Les interfaces série RS-232/485 sont également intégrées au routeur et disponibles immédiatement dans le système d'exploitation avec un accès root complet. Un environnement ouvert pour le développement de programmes personnalisés et des bibliothèques C/C++ pour travailler avec l'API matérielle de bas niveau sont également disponibles.
La fonction de mode profond de sommeil permettra d'économiser de l'énergie lors du fonctionnement sur batterie : le routeur peut être activé uniquement lorsque la connexion est réellement nécessaire.

Dans cet article, nous examinerons les fonctionnalités intéressantes de l'appareil et essaierons de travailler pratiquement avec l'interface d'entrée-sortie à partir de scripts shell.

Caractéristiques techniques

Les routeurs de la série ICR-3200 sont réalisés sur une plateforme matérielle unique et proposés en cinq modèles, différenciés par les plages de fréquences LTE, la présence de Wi-Fi et de géolocalisation (GNSS). Les appareils sont positionnés comme un remplacement pour l'association d'un ordinateur à carte unique et d'un routeur. Un processeur puissant et une grande quantité de RAM permettent d'exécuter des applications utilisateurs gourmandes en ressources directement sur le routeur.

  • Processeur Cortex-A8 — fréquence d'horloge 1 GHz, architecture 32 bits
  • 512 Mo de RAM
  • Mémoire flash de 1,5 à 4 Go — pour le stockage des données utilisateur
  • Ports d'entrée-sortie — les interfaces RS-232/485 et les ports numériques d'entrée-sortie sont accessibles pour les programmes utilisateurs

Un modèle distinct à noter ICR-3211B, fonctionnant selon la norme LTE Cat. M1 (NB-IoT). Le protocole LTE Cat. M1 a été spécialement conçu pour les solutions M2M, offrant une faible vitesse de transmission des données (375 kbit/s), ainsi qu'une grande portée et une stabilité accrue dans des conditions de connexion difficiles à l'intérieur des bâtiments. Le routeur possède un supercapaciteur, permettant à l'appareil de fonctionner brièvement après une coupure complète d'alimentation.

Mode profond de sommeil

Le mode profond de sommeil permet de mettre le routeur dans un état où tous les processus sont gelés et le matériel est désactivé, pour économiser de l'énergie, tandis que toutes les fonctions de l'appareil sont désactivées et de l'extérieur, il semble complètement éteint. La consommation d'énergie en mode tel est ne dépassant pas 10 mW.

Un routeur 4G en tant que serveur universel pour l'IoT
En mode veille, le routeur consomme presque aucune énergie et se réveille en 3 secondes.

Lorsque le routeur doit être réveillé pour transmettre des données, il se réveille en ~3 secondes.. Bien sûr, un temps supplémentaire sera nécessaire pour enregistrer le modem sur le réseau mobile, mais c'est beaucoup plus rapide que le démarrage complet du routeur. Cette option est utile pour les systèmes alimentés par batterie, qui sont la plupart du temps en mode veille et qui s'activent de temps en temps pour réaliser des actions comme une alarme ou une réserve.

Réveil et mise en veille

La gestion de la mise en veille et du réveil se fait via le module Mode Veille.

Il existe 2 manières de gérer le mode veille :

  • Via l'entrée numérique — dans ce mode, le routeur est contrôlé par un dispositif externe, tel qu'un microcontrôleur. Sur un signal LOW à l'entrée numérique, le routeur se met en veille, et en recevant un HIGH, il se réveille, ou vice versa. Il est également possible de configurer un délai d'activation pour éviter les commutations accidentelles.
  • Via le minuteur interne — le routeur compte le temps et se réveille/se met en veille à l'heure voulue. C'est pratique pour effectuer des opérations ponctuelles ou pour télécharger des données sur une période déterminée.

Un routeur 4G en tant que serveur universel pour l'IoT
Interface de configuration du mode veille profonde

Fonction « dernier souffle »

Une panne de courant sur un site distant peut être particulièrement désagréable, car il n'est pas clair pourquoi la connexion est perdue. La fonction « Dernier souffle » permet au routeur de fonctionner pendant un certain temps après l'arrêt complet de l'alimentation et d'envoyer un message indiquant qu'il y a eu une panne et que l'alimentation de secours ne s’est pas activée. Grâce à un supercondensateur intégré, dont la durée de vie est nettement supérieure à celle des batteries, il ne nécessite pas d'entretien ni de remplacement. C'est utile pour les systèmes de secours où des pannes peuvent se produire et où il est important de suivre le moment de la perte complète de tension.

Un routeur 4G en tant que serveur universel pour l'IoT
Le routeur enverra un signal de panne de courant même après l'arrêt total de l'alimentation.

Pour réagir correctement à un événement de perte d'alimentation, il faut en être informé d'une manière ou d'une autre.
La tension d'alimentation actuelle peut être obtenue soit par une commande shell. status sys:

$ status sys
Version du firmware : 6.1.10 (2019-07-02)
Numéro de série    : ACZ1100000623519
Profil            : Standard
Batterie RTC      : Ok
Tension d'alimentation   : 12.3 V # ← tension d'alimentation
Température       : 37 C   # ← température à l'intérieur du boîtier
Heure             : 2019-08-16 16:21:18
Temps de fonctionnement : 0 jours, 11 heures, 43 minutes

Soit par le biais du contrôle I/O Unix matériel (ioctl) et d'un programme en C/C++ ou dans un autre langage.
Le tableau montre les adresses des registres matériels nécessaires. La tension d'alimentation actuelle est renvoyée sous forme d'entier, en millivolts. L'utilisation d'une API de bas niveau est préférable aux scripts shell dans ce cas pour une réaction plus rapide. Des informations détaillées sur le travail avec le matériel sont disponibles dans le manuel du développeur.

Un routeur 4G en tant que serveur universel pour l'IoT
Requête ioctl renvoyant la tension d'alimentation actuelle.

Interfaces série

Le routeur intègre deux interfaces série : RS-232 et RS-485. Elles permettent de connecter des périphériques directement au routeur, sans utiliser de câblage supplémentaire. De plus, un serveur Node-RED ou Nodejs complet peut être exécuté sur le routeur, ce qui permet d'utiliser un seul appareil pour déployer un système d'automatisation simple, sans ordinateurs ou contrôleurs supplémentaires.

Un routeur 4G en tant que serveur universel pour l'IoT

Par défaut, les deux interfaces sont disponibles pour fonctionner comme des périphériques série standard sous Linux :

ls -la /dev/ttyS*
crw-------    1 root     root      251,   0 Jan  1  1970 /dev/ttyS0 # ← port rs-232
crw-------    1 root     root      251,   1 Jan  1  1970 /dev/ttyS1 # ← port rs-485 
crw-------    1 root     root      251,   5 Jan  1  1970 /dev/ttyS5 # ← non connecté

Toutes les bibliothèques standard prendront en charge ces appareils sans configurations supplémentaires, y compris le module Modbus-RTU2TCP et d'autres.

Modules personnalisés

La fonctionnalité de l'appareil peut être étendue à l'aide de modules personnalisés : c'est une version simplifiée des paquets, mais sans gestionnaire de paquets. La liste complète des modules disponibles est disponible sur le site https://advantech-bb.cz/products/software/user-modules.

Les modules sont installés manuellement, en téléchargeant le fichier du paquet via l'interface web :

Un routeur 4G en tant que serveur universel pour l'IoT

Actuellement, 73 modules sont disponibles. Voici quelques-uns d'entre eux :

  • Node-RED — un outil populaire pour l'intégration de divers protocoles industriels en un système cohérent
  • Nodejs — un serveur nodejs complet. Une grande quantité de RAM et un puissant processeur permettent d'exécuter des applications gourmandes en ressources directement sur le routeur !
  • Python2/3
  • Shell web — permet de travailler dans la console via le navigateur.
  • Azure IoT SDK Python — un ensemble d'outils pour le développement d'applications pour Microsoft Azure IoT Hub.

Étant donné que le firmware des routeurs est ouvert, les développeurs peuvent écrire leurs propres modules, y compris ceux avec interface web. Les ressources documentaires sont disponibles dans le guide de rédaction de modules et et dans la section pour les développeurs sur le site web de l'entreprise. Pour faciliter l'assemblage des paquets, un environnement de cross-compilation est disponible..

Les ressources matérielles via des scripts shell.

Pour des tâches simples d'automatisation, il est pratique d'utiliser des scripts shell, à partir desquels on peut gérer l'indication lumineuse et obtenir/définir l'état des broches numériques.

L'indication lumineuse est utile pour montrer l'état actuel d'exécution des commandes. Par exemple, l'indication de transmission de données — clignotement fréquent, tentative de connexion — clignotement rare, inactivité — allumée en continu. Voyons la commande led. Elle prend en entrée un seul argument — le type de clignotement de la LED.

# led
led on|off|fast|slow

Voici à quoi cela ressemble dans la vie réelle :


Démonstration des modes de fonctionnement de l'indicateur utilisateur via des commandes shell.

Pour travailler avec des broches numériques, on utilise la commande io.

$ io
Usage: io [get ] | [set  ]

io set out0 1 # Définir la sortie numérique OUT0 à l'état 1 (LOW)
io get bin0   #  Obtenir la valeur de l'entrée numérique BIN0

Il est important de se rappeler que la logique dans ce cas est inversée. Par conséquent, 1=LOW, 0=HIGH. En utilisant la commande io nous pouvons facilement travailler avec des broches numériques à partir de scripts bash et construire une logique simple pour l'automatisation et le contrôle.

À titre de démonstration de la simplicité de travail avec des entrées numériques et d'indication, écrivons un script inutile qui affiche le statut de l'entrée numérique à l'aide d'une LED.

#!/bin/bash
while true
do
	[ $(io get bin0) -eq 0 ] && led fast || led on
done

Le principe de fonctionnement du script est simple : si BIN0 est à l'état 0, la LED clignote fréquemment, sinon elle reste allumée en continu. Voici à quoi cela ressemble en direct :


Démonstration du script bash affichant l'état de l'entrée numérique avec un indicateur.

Malgré la simplicité de ce script, il montre clairement comment en une ligne, sans logiciel additionnel, bibliothèques ou configurations, on peut obtenir des données d'entrée à partir des entrées numériques et y réagir.

Liens

Nous vous invitons au forum des partenaires Advantech

Un routeur 4G en tant que serveur universel pour l'IoT
Le forum Advantech sera une plateforme unique pour discuter des tendances locales et mondiales dans le domaine de l'Internet des objets. Vous pourrez partager votre expérience sur l'utilisation de nouvelles solutions technologiques et produits, trouver de nouveaux clients et partenaires. Vous aurez l'opportunité de découvrir les produits que nous avons décrits dans nos articles et bien plus encore. Des leaders du secteur et des représentants de partenaires clés, tels que NVidia, Intel et d'autres entreprises qui participent activement au développement de l'Internet industriel des objets pour les années à venir, prendront la parole. Nous serons ravis de voir tous les spécialistes de l'automatisation industrielle et de l'Internet des objets lors de cet événement. La participation à l'événement est gratuite ! Le nombre de places est limité. N'attendez pas pour vous inscrire.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster