
Compartilhar:
Ex-educador de desenvolvedores na @Vonage. Tenho formação em PHP, mas não me limito a uma única linguagem. Sou um jogador ávido e entusiasta do Raspberry Pi. Costumo praticar escalada em rocha em centros de escalada indoor.
Enviar o endereço IP do Raspberry Pi na inicialização no Node.js usando o módulo Messages
Tempo de leitura: 12 minutos
Como sou um entusiasta do Raspberry Pi, já houve várias ocasiões em que precisei de um script reutilizável para aprimorar meus projetos. Um excelente exemplo disso é saber qual é o endereço IP do meu Raspberry Pi ao inicializar no modo headless (sem monitor, teclado ou mouse).
Recentemente, publiquei um tutorial sobre como montar um sistema de vigilância doméstica com o Node e um Raspberry Pi. Ao implementar esse projeto, a ideia é não ter o Raspberry Pi conectado a um monitor; portanto, não há uma maneira padrão de saber o endereço IP do Raspberry Pi quando ele é inicializado em um local remoto, longe de qualquer monitor. Este tutorial irá guiá-lo por uma solução para o problema de não saber o endereço IP.
Pré-requisitos
O Código
Dentro do diretório do seu projeto, crie e abra um arquivo chamado .env, adicionando suas variáveis de ambiente. Você pode encontrar suas API_KEY e API_SECRET no Painel do Desenvolvedor da Vonage. Adicione esses valores às duas primeiras linhas do exemplo abaixo:
Se você optar por receber notificações por SMS, adicione seu número de celular à SMS_TO= parte do seu .env arquivo. Se você decidir usar o WhatsApp para suas notificações, adicione seu número de celular vinculado ao WhatsApp à WHATSAPP_TO= parte do seu .env arquivo.
Você pode encontrar o seu WHATSAPP_FROM número na página da API do Sandbox de Mensagens .
Siga todas as instruções solicitadas pelo comando acima. Em seguida, quando terminar, execute o comando abaixo para instalar o Nexmo Node SDK, Express, Body-Parser e DotEnv no seu projeto:
Crie um novo arquivo no diretório do seu projeto chamado index.js, e, em seguida, abra esse arquivo. O primeiro passo é obter o endereço IP do seu Raspberry Pi.
Adicione o código abaixo ao seu novo index.js arquivo. O OS módulo fornece acesso às informações do sistema operacional do dispositivo, como o network interfaces.
O código abaixo percorre cada uma dessas interfaces em busca da interface chamada wlan0, garantindo que essa interface seja IPv4 e não seja uma interface voltada para o ambiente interno.
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;
}
});
});
Se você executar o comando abaixo no Terminal, o endereço IP do Wi-Fi do seu dispositivo deverá ser exibido como resultado:
Em seguida, é hora de enviar o endereço IP como uma notificação. Este tutorial permite que você escolha enviar a notificação como uma mensagem de texto do SMS, uma mensagem do WhatsApp ou ambas.
Enviar SMS
Para enviar um SMS, é necessário usar sua chave de API e seu segredo de API, que você já salvou no .env arquivo. Primeiro, no início do seu index.js arquivo, adicione as seguintes linhas para incluir o Nexmo pacote e DotEnv package:
Agora, no final do seu arquivo, adicione a seguinte funcionalidade, que inicializa o Nexmo objeto com a chave e o segredo da API. A próxima linha preenche a variável text com a string “Seu endereço IP é:” e, em seguida, o ipAddress passado para a função.
A última parte desse método envia a mensagem 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 pelo WhatsApp
Para enviar uma mensagem pelo WhatsApp, é preciso fornecer um pouco mais de informação, incluindo um Application ID e o Private Key. Para criar um aplicativo que gere tanto a application_id variável e o private.key arquivo, execute o seguinte comando:
Abra seu .env arquivo e atualize a linha APPLICATION_ID= para incluir seu novo Application ID.
De volta ao seu index.js arquivo, na parte inferior do arquivo, adicione o seguinte 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);
}
}
);
}
O exemplo acima cria uma nova função chamada sendWhatsApp com o parâmetro ipAddress. A função inicia uma nova instância do Nexmo objeto usando o API_KEY, API_SECRET, APPLICATION_IDe APPLICATION_PRIVATE_KEY_PATH. A informação extra importante necessária aqui é definir o apiHost para garantir que a conexão estabelecida seja com a messages-sandbox API e não à API de produção padrão.
O restante do método cria uma string informando ao usuário qual é o endereço IP e, em seguida, envia a WhatsApp mensagem.
Envio da notificação
Da forma como está, nada é enviado se você executar node index.js. O endereço IP será exibido, nada mais. Para enviar a notificação, seja por SMS, mensagem do WhatsApp ou ambos, localize a linha: console.log(iface.address);. Abaixo dessa linha, adicione o seguinte:
// To send an SMS:
sendSms(ipAddress);
// To send a WhatsApp message:
sendWhatsApp(ipAddress); Execute o comando
Agora que o código está implementado e funcionando, é preciso configurar o sistema operacional para executar esse script sempre que o Raspberry Pi for inicializado. Para isso, abra o seguinte arquivo no Terminal:
Este arquivo executará comandos sempre que o sistema operacional for inicializado. Acima da linha: exit 0 adicione o seguinte comando para executar o projeto que você acabou de compilar. Certifique-se de atualizar o caminho completo do arquivo index.js:
Experimente!
Você configurou um Raspberry Pi e escreveu um código que permite enviar o endereço IP do Raspberry Pi para você via WhatsApp, SMS ou chamada de voz com a função Text-To-Speech. Agora, basta reiniciar o Raspberry Pi e observar as notificações chegarem ao número de destino.
Leitura complementar
Aqui estão mais alguns artigos que podem ser úteis para você criar um serviço com um Raspberry Pi ou enviar mensagens pelo WhatsApp.
E não se esqueça: se tiver alguma dúvida, sugestão ou ideia que gostaria de compartilhar com a comunidade, sinta-se à vontade para participar do nosso espaço de trabalho do Slack da Comunidade.