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)

Compartilhe esse Post