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)