
Partager:
Ancien développeur éducateur @Vonage. Issu d'une formation PHP, mais pas limité à un seul langage. Joueur passionné et adepte du Raspberry pi. On le trouve souvent en train de faire du bloc dans des salles d'escalade.
Envoyer l'adresse IP du Raspberry Pi au démarrage d'un nœud avec des messages
Temps de lecture : 12 minutes
En tant que passionné du Raspberry Pi, il m'est arrivé à plusieurs reprises d'avoir besoin d'un script réutilisable que je pouvais utiliser pour améliorer mes projets. Un excellent exemple est de savoir quelle est l'adresse IP de mon Raspberry Pi lorsque je démarre en mode headless (sans moniteur, clavier ou souris).
Récemment, j'ai publié un tutoriel sur la façon de construire un système de surveillance domestique avec Node et un Raspberry Pi. Lors de la mise en œuvre de ce projet, l'idée est de ne pas avoir le Raspberry Pi connecté à un moniteur, donc pas de moyen par défaut de connaître l'adresse IP du Raspberry Pi lorsqu'il est démarré dans un endroit éloigné de tout moniteur. Ce tutoriel vous guidera à travers une solution au problème de ne pas connaître l'adresse IP.
Conditions préalables
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.
Le code
Dans le répertoire de votre projet, créez et ouvrez un fichier appelé .enven y ajoutant vos variables d'environnement. Vous pouvez trouver vos variables API_KEY et API_SECRET dans le tableau de bord du développeur Vonage. Ajoutez ces valeurs aux deux premières lignes de l'exemple ci-dessous :
Si vous choisissez d'envoyer des notifications par SMS, ajoutez votre numéro de mobile à la SMS_TO= de votre .env de votre fichier. Si vous décidez d'utiliser WhatsApp pour vos notifications, ajoutez votre numéro de mobile compatible WhatsApp à la WHATSAPP_TO= partie de votre .env fichier.
Vous trouverez votre WHATSAPP_FROM sur l'API API Messages Sandbox de Messages Sandbox.
Suivez toutes les instructions de la commande ci-dessus. Ensuite, une fois que vous avez terminé, exécutez la commande ci-dessous pour installer le fichier Nexmo Node SDK, Express, Body-Parser et DotEnv dans votre projet :
Créez un nouveau fichier dans le répertoire de votre projet, appelé index.jset ouvrez ce fichier. La première étape consiste à récupérer l'adresse IP de votre Raspberry Pi.
Ajoutez le code ci-dessous à votre nouveau fichier index.js fichier. Le module OS permet d'accéder aux informations du système d'exploitation de l'appareil, telles que le fichier network interfaces.
Le code ci-dessous parcourt en boucle chacune de ces interfaces à la recherche de l'interface nommée wlan0en s'assurant que cette interface est IPv4 et qu'il ne s'agit pas d'une interface interne.
const os = require('os');
var ifaces = os.networkInterfaces();
Object.keys(ifaces).forEach(function (ifname) {
ifaces[ifname].forEach(function (iface) {
if ('wlan0' === ifname && "IPv4" === iface.family && iface.internal === false) {
console.log(iface.address);
return;
}
});
});
Si vous exécutez la commande ci-dessous dans votre terminal, vous devriez obtenir l'adresse IP Wifi de votre appareil :
Ensuite, il est temps d'envoyer l'adresse IP sous forme de notification. Ce tutoriel vous permet de choisir d'envoyer la notification sous la forme d'un SMS, d'un message WhatsApp ou des deux.
Envoyer un SMS
L'envoi d'un SMS nécessite l'utilisation de votre clé et de votre secret d'API, que vous avez déjà enregistrés dans le fichier .env fichier. Tout d'abord, en haut de votre fichier index.js ajoutez les lignes suivantes pour inclure le paquetage Nexmo et DotEnv package :
Maintenant, au bas de votre fichier, ajoutez la fonctionnalité suivante, qui initie l'objet Nexmo avec la clé et le secret de l'API. La ligne suivante remplit la variable text avec la chaîne "Votre adresse IP est :", puis la variable ipAddress passée dans la fonction.
La dernière partie de cette méthode envoie le SMS.
function sendSms(ipAddress) {
const nexmo = new Nexmo({
apiKey: process.env.API_KEY,
apiSecret: process.env.API_SECRET,
});
var text = "Your IP Address is: " + ipAddress;
nexmo.message.sendSms(process.env.SMS_FROM, process.env.SMS_TO, text);
} Envoyer WhatsApp
L'envoi d'un message WhatsApp nécessite un peu plus d'informations, notamment un numéro de téléphone et un mot de passe. Application ID et le Private Key. Pour créer une application qui génère à la fois la variable application_id et le fichier private.key exécutez la commande suivante :
Ouvrez votre fichier .env et mettez à jour la ligne APPLICATION_ID= pour qu'elle contienne votre nouveau Application ID.
De retour dans votre fichier index.js au bas du fichier, ajoutez la commande suivante :
function sendWhatsApp(ipAddress) {
const nexmo = new Nexmo({
apiKey: process.env.API_KEY,
apiSecret: process.env.API_SECRET,
applicationId: process.env.APPLICATION_ID,
privateKey: process.env.APPLICATION_PRIVATE_KEY_PATH
}, {
apiHost: 'messages-sandbox.nexmo.com'
});
var text = "Your IP Address is: " + ipAddress;
nexmo.channel.send(
{ "type": "whatsapp", "number": process.env.WHATSAPP_TO },
{ "type": "whatsapp", "number": process.env.WHATSAPP_FROM },
{
"content": {
"type": "text",
"text": text
}
},
(err, data) => {
if (err) {
console.error(err);
} else {
console.log(data.message_uuid);
}
}
);
}
L'exemple ci-dessus crée une nouvelle fonction appelée sendWhatsApp avec le paramètre ipAddress. La fonction crée une nouvelle instance de l'objet Nexmo à l'aide du paramètre API_KEY, API_SECRET, APPLICATION_ID, , et APPLICATION_PRIVATE_KEY_PATH. L'élément d'information supplémentaire nécessaire ici est le réglage de l'élément apiHost pour s'assurer que la connexion établie est bien celle de l'API messages-sandbox et non à l'API de production standard.
Le reste de la méthode crée une chaîne de caractères indiquant à l'utilisateur l'adresse IP, puis envoie le WhatsApp message.
Envoi de la notification
Dans l'état actuel des choses, rien n'est envoyé si vous exécutez node index.js. L'adresse IP est affichée, mais rien d'autre. Pour envoyer la notification, que ce soit sous la forme d'un SMS, d'un message WhatsApp ou des deux, trouvez la ligne : console.log(iface.address);. Sous cette ligne, ajoutez ce qui suit :
// To send an SMS:
sendSms(ipAddress);
// To send a WhatsApp message:
sendWhatsApp(ipAddress); Exécuter la commande
Maintenant que le code est implémenté et fonctionne, le système d'exploitation doit être configuré pour exécuter ce script à chaque fois que le Raspberry Pi démarre. Pour ce faire, ouvrez le fichier suivant dans votre Terminal :
Ce fichier exécute des commandes à chaque fois que le système d'exploitation démarre. Au-dessus de la ligne : exit 0 ajoutez la commande suivante pour exécuter le projet que vous venez de construire. Veillez à mettre à jour le chemin complet du fichier index.js:
Testez-le !
Vous avez configuré un Raspberry Pi, écrit un peu de code qui vous permet soit d'envoyer l'adresse IP du Raspberry Pi par WhatsApp, SMS ou appel vocal Text-To-Speech. Il ne reste plus qu'à redémarrer le Raspberry Pi et à regarder la ou les notifications arriver dans le numéro de destination.
Pour en savoir plus
Voici d'autres articles qui pourraient vous être utiles pour créer un service avec un Raspberry Pi ou pour envoyer des messages WhatsApp.
Et n'oubliez pas, si vous avez des questions, des conseils ou des idées que vous souhaitez partager avec la communauté, n'hésitez pas à vous rendre sur notre espace de travail Slack de la communauté.
