Projet de M2 à l'École Hexagone.
L'application front-end Angular 17 est disponible ici : https://github.com/Walouiji/intellizon-front
Les dépendances suivantes doivent être installées sur le poste :
- Docker
- NPM (NodeJS)
- Arduino IDE
- Démarrez une instance Docker de MongoDB en exécutant run_mongo_docker.bat.
- Par défaut l'utilisateur et le mot de passe sont
admin
, pensez à les changer et à créer des utilisateurs avec moins de permissions.
-
Installez les dépendances NPM :
cd ./express npm i
-
Générez deux clés API, par exemple avec https://it-tools.tech/token-generator?length=50.
-
Ajoutez un fichier
.env
dans ./express/ comme suit :HELIUM_IOT_API_KEY=<clé-api-générée-1> INTELLIZON_FRONT_API_KEY=<clé-api-généré-2> MONGO_DB_USERNAME="<votre-utilisateur>" MONGO_DB_PASSWORD="<votre-mot-de-passe>" MONGO_DB_URL=localhost:27017
Ces clées seront nécessaires pour intégrer HTTP depuis la Console Helium IoT de manière sécurisée, ainsi que pour sécuriser les requêtes depuis le Front.
Si vous avez modifié le mot de passe dans run_mongo_docker.bat, il faut aussi le faire dans la constante
MONGO_DB_PASSWORD
. -
Exécutez run_express_server.bat pour démarrer le serveur.
Ce chapitre admet que vous ne déployez pas votre application sur un VPS en Cloud, et que vous avez besoin de Ngrok pour permettre à Helium IoT d'effectuer des requêtes API sur votre serveur.
- Téléchargez Ngrok : https://ngrok.com/download
- Dézippez et placez l'exécutable dans un dossier ./ngrok/.
- Pour obtenir votre Auth Token, créez-vous un compte et accédez à https://dashboard.ngrok.com/get-started/your-authtoken.
- Ouvrez un terminal au niveau de ./ngrok/ et configurez votre Auth Token sur votre poste :
ngrok config add-authtoken <votre-auth-token-ngrok>
-
Vous pouvez démarrer un tunnel SSH avec la commande suivante :
ngrok http http://localhost:<port>
Ngrok va automatiquement créer une URL pour accéder à votre service.
Notez que l'URL générée utilise un certificat SSL auto-signé, d'où l'affichage d'un message de danger.
- Exposez rapidement votre serveur ExpressJS avec Ngrok sur le port
3000
en exécutant run_express_ngrok.bat.
Ce chapitre admet que vous avez un compte Helium IoT avec des tokens disponibles pour l'envoie de données en LoRaWAN. Plus d'informations dans le script arduino/IntelliZon_LoRa_E5/IntelliZon_LoRa_E5.ino (et les URL qui y sont mises en commentaires).
- Ouvrez la Console Helium IoT.
- Allez dans
Device profiles > (Profile souhaité) > Codec > Codec functions
. - Saisissez le script suivant afin de décoder le flux de données LoRaWAN :
// Decode uplink function. // // Input is an object with the following fields: // - bytes = Byte array containing the uplink payload, e.g. [255, 230, 255, 0] // - fPort = Uplink fPort. // - variables = Object containing the configured device variables. // // Output must be an object with the following fields: // - data = Object representing the decoded payload. function decodeUplink(input) { let bytes = input.bytes; let port = input.fPort; let decoded = {}; if ((port === 1) || (port === 8)) { decoded.temp = bytes[0] << 8 | bytes[1]; decoded.humidity = bytes[2] << 8 | bytes[3]; decoded.light = bytes[4] << 8 | bytes[5]; return { data: decoded }; } return null; } // Encode downlink function. // // Input is an object with the following fields: // - data = Object representing the payload that must be encoded. // - variables = Object containing the configured device variables. // // Output must be an object with the following fields: // - bytes = Byte array containing the downlink payload. function encodeDownlink(input) { return { bytes: [225, 230, 255, 0] }; }
- Validez avec
Submit
.
- Ouvrez la Console Helium IoT.
- Allez dans
Application > (Application souhaitée) > Integrations > HTTP
. - Définissez les paramètres de la façon suivante :
- Payload encoding :
JSON
- Event endpoint URL(s) :
https://<domaine-exposé-avec-ngrok>/api/helium/saveData
- Headers :
Authorization
:<la-clé-api-générée-pour-helium-iot>
- Payload encoding :
Helium IoT peut désormais utiliser l'API de votre serveur ExpressJS pour enregistrer les données envoyées par vos capteurs.