
Compartir:
Antiguo educador de desarrolladores @Vonage. Procedente de PHP, pero no limitado a un solo lenguaje. Un ávido jugador y un entusiasta de Raspberry pi. A menudo se le encuentra practicando escalada en rocódromo.
Enviar Raspberry Pi Dirección IP en el arranque en el nodo con los mensajes
Tiempo de lectura: 12 minutos
Siendo un entusiasta de Raspberry Pi, ha habido varias ocasiones en las que se necesita un script reutilizable que puedo utilizar para mejorar mis proyectos. Un buen ejemplo de ello es saber cuál es la dirección IP de mi Raspberry Pi al arrancar en modo headless (sin monitor, teclado ni ratón).
Hace poco publiqué un tutorial sobre cómo construir un Sistema de Vigilancia Doméstica con Node y una Raspberry Pi. Al implementar este proyecto, la idea es no tener la Raspberry Pi conectada a un monitor, por lo que no hay forma predeterminada de conocer la dirección IP de la Raspberry Pi cuando se inicia en una ubicación remota lejos de cualquier monitor. Este tutorial le guiará a través de una solución al problema de no conocer la dirección IP.
Requisitos previos
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.
El Código
Dentro del directorio de su proyecto, cree y abra un archivo llamado .envy añada sus variables de entorno. Puede encontrar sus API_KEY y API_SECRET en el Panel del desarrollador de Vonage. Agrega estos valores a las dos primeras líneas del siguiente ejemplo:
Si decide enviar notificaciones por SMS, añada su número de móvil a la sección SMS_TO= parte de su .env archivo. Si decides utilizar WhatsApp para tus notificaciones, añade tu número de móvil habilitado para WhatsApp a la parte de WHATSAPP_TO= parte de su .env archivo.
Puede encontrar su WHATSAPP_FROM número en la Mensajes Sandbox API página.
Siga todas las instrucciones del comando anterior. A continuación, una vez terminado, ejecute el siguiente comando para instalar el Nexmo Node SDK, Express, Body-Parser y DotEnv en su proyecto:
Cree un nuevo archivo en el directorio de su proyecto llamado index.jsy abre este archivo. La primera parte necesaria es recuperar la dirección IP de tu Raspberry Pi.
Añada el código siguiente a su nuevo archivo index.js archivo. El módulo OS proporciona acceso a la información del sistema operativo del dispositivo, como el archivo network interfaces.
El siguiente código recorre cada una de estas interfaces buscando la interfaz denominada wlan0asegurándose de que la interfaz es IPv4 y no es una interfaz interna.
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 ejecutas el siguiente comando en tu Terminal, deberías obtener como resultado la dirección IP Wifi de tu dispositivo:
A continuación, es hora de enviar la dirección IP como notificación. Este tutorial te permite elegir enviar la notificación como un mensaje de texto SMS, un mensaje de WhatsApp o ambos.
Enviar SMS
Para enviar un SMS es necesario utilizar la clave y el secreto de la API, que ya has guardado en el archivo .env archivo. En primer lugar, en la parte superior del archivo index.js añada las siguientes líneas para incluir el paquete Nexmo y DotEnv paquete:
Ahora, en la parte inferior de su archivo, agregue la siguiente funcionalidad, que inicia el Nexmo con la clave y el secreto de la API. La siguiente línea rellena la variable text con la cadena "Your IP Address is:" y luego la variable ipAddress pasada a la función.
La última parte de este método envía el 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);
} Enviar WhatsApp
Enviar un mensaje de WhatsApp requiere un poco más de información, incluyendo un Application ID y el icono Private Key. Para crear una aplicación que genere tanto la variable application_id y el archivo private.key ejecute el siguiente comando:
Abra su .env y actualice la línea APPLICATION_ID= para que contenga la nueva línea Application ID.
En su archivo index.js archivo, al final del archivo añada el siguiente comando:
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);
}
}
);
}
El ejemplo anterior crea una nueva función llamada sendWhatsApp con el parámetro ipAddress. La función inicia una nueva instancia del objeto Nexmo utilizando el parámetro API_KEY, API_SECRET, APPLICATION_IDy APPLICATION_PRIVATE_KEY_PATH. La información extra importante que se necesita aquí es establecer el parámetro apiHost para asegurarse de que la conexión se realiza a la API messages-sandbox y no a la API de producción estándar.
El resto del método crea una cadena que indica al usuario cuál es la dirección IP y, a continuación, envía el WhatsApp mensaje.
Envío de la notificación
Tal y como están las cosas, no se envía nada si se ejecuta node index.js. Se mostrará la dirección IP, nada más. Para enviar la notificación, ya sea como SMS, mensaje de WhatsApp o ambos, busque la línea : console.log(iface.address);. Debajo de esta línea, añada lo siguiente:
// To send an SMS:
sendSms(ipAddress);
// To send a WhatsApp message:
sendWhatsApp(ipAddress); Ejecutar el comando
Ahora que el código está implementado y funcionando, el sistema operativo necesita ser configurado para ejecutar este script cada vez que la Raspberry Pi arranque. Para ello, abra el siguiente archivo en su Terminal:
Este archivo ejecutará comandos cada vez que se inicie el sistema operativo. Sobre la línea: exit 0 añade el siguiente comando para ejecutar el proyecto que acabas de construir. Asegúrese de actualizar la ruta completa del archivo index.js:
¡Pruébalo!
Has configurado una Raspberry Pi, escrito algo de código que te permite enviar la dirección IP de la Raspberry Pi a través de WhatsApp, SMS o llamada de voz Text-To-Speech. Todo lo que queda por hacer ahora es reiniciar la Raspberry Pi y ver la notificación(es) llegar al número de destino.
Lecturas complementarias
Aquí tienes más artículos que pueden resultarte útiles para crear un servicio con una Raspberry Pi o enviar mensajes de WhatsApp.
Y no lo olvides, si tienes alguna pregunta, consejo o idea que quieras compartir con la comunidad, no dudes en entrar en nuestro espacio de trabajo comunitario Slack.
