Blog do Jorge Maia

February 02, 2018 / by Jorge Maia

Como saber o IP do Raspberry Pi via MQTT sem monitor (headless)

Uma dúvida recorrente do pessoal é sobre como pegar o IP de um Raspberry pi sem um monitor. Primeiro é legal falarmos que existem diversas formas.

Email é uma recorrente nas buscas, acho complexo a ideia de usar email, pois imagine que tenhamos que usar o protótipo em uma empresa e a conta de email ultrapasse o limite de envio por hora por exemplo, ou você precise alterar a senha, bom podemos citar vários problemas que o email pode dar, eu portanto deixaria esta opção por último.

já vimos algumas que usam pequenos displays, acho essa sensacional, mas envolve um display, fios, soldas e algumas outras coisas, o que poderia gerar mais trabalho e uma aparência muito legal ou muito feia parecendo algo não acabado, portanto eu deixaria esse em penúltimo.

A que mais me agrada, deixando de falar aqui sobre as que buscam pelo MAC Address inferindo o ip, ou instalam agentes que fazem broadcast na rede, é a de usar um protocolo de baixo peso e ao conectar a web ou a rede local, se comunicar com o broker de mensageiria e enviar seu ip.

Com isso, trazemos a cara do IoT para essa atividade, uso de protocolo, pouco peso e a possibilidade da colocação desse dispositivo em qualquer local e seu funcionamento com a possibilidade de acesso. Vamos deixar a questão de NAT, Firewall e outros de fora nesse momento.

Para isso criei um pequeno script que utiliza MQTT como orquestrador da mensageiria, em conjunto com Node JS, algo simples e rápido de fazer e programar, e aciono o script no momento da inicialização.

Veja como o código é pequeno: (não copie daqui, clone o repositório do git que tem as instruções para a colocação na inicialização)


var mqtt = require('mqtt'); 
var ip = require('ip');
var myip = ip.address(); 
var devicename = 'devdemo001';  
var mytopic = 'jorgemaiatopic1';  

var client  = mqtt.connect('tcp://broker.mqttdashboard.com', { 
    will: {
    topic: mytopic,  
    payload: devicename + ' down' //mensagem quando o device cair
    }
})

client.on('connect', function () {
  
  client.publish(mytopic, devicename + ' up - IP: ' + myip);
})

Resultado:

o código com comentários pode ser obtido aqui: (https://github.com/jorgemaia/IoT-rpi-basic)

Comentários