Instalando a extensão Mosquitto-PHP no Ubuntu

E ai, bora instalar a extensão Mosquitto-PHP? Testado e sendo usado em dois servidores com Ubuntu 16+, um local e um externo. Não sabe a versão do seu? Use o comando no terminal:

1
lsb_release -a

O comando acima irá retornar algo como:

1
2
3
4
Distributor ID:	Ubuntu
Description: Ubuntu 16.04 LTS
Release: 16.04
Codename: xenial

Certo, chega de perder tempo olhando versão. Primeiro, temos que instalar o pacote libmosquitto-dev, em alguns sistemas derivados do Red Hat é provável que seja chamado de libmosquitto-devel, mas, se não for, tente a outra forma.

1
sudo apt-get install libmosquitto-dev

Já ia me esquecendo, a primeira vez que fui instalar usando o PECL e seguindo o tutorial do próprio Github deles, não deu muito certo, eu tive que pesquisar e tentar outras maneiras, até que achei uma solução e funcionou, mas mesmo assim houve alguns problemas no decorrer da instalação, então, aqui eu mostro como instalei e funcionou sem nenhum problema e sem nenhum erro antes, durante e nem depois da instalação. Se der algum problema no seu, pesquise e ache uma solução, mas creio que dará tudo certo.

Agora vamos clonar o repositório da extensão para uma pasta qualquer, eu costumo jogar tudo na /tmp, mas é você quem decide.

1
git clone https://github.com/mgdm/Mosquitto-PHP.git

E vamos entrar na pasta…

1
cd Mosquitto-PHP/

E agora? Vamos instalar a extensão de fato.

1
phpize

1
./configure --with-mosquitto=/path/to/libmosquitto
1
make
1
make test

Em alguns casos, aqui não é necessário usar sudo, mas em outros é! Então, faça de acordo com sua máquina.

1
sudo make install

Já instalado, está quase pronto. Agora precisamos ativar a extensão nas configurações (php.ini) do PHP. No meu caso, o PHP se encontra instalado em /etc/php/7.0/.

Abra e altere o arquivo php.ini. Se você não sabe como usar o vim, olhe aqui.

1
sudo vi /etc/php/7.0/cli/php.ini

E adicione a seguinte linha em extension no PHP Cli

1
extension=mosquitto.so

Abra e altere o arquivo php.ini no FPM também.

1
sudo vi /etc/php/7.0/fpm/php.ini

E adicione a seguinte linha em extension no PHP FPM

1
extension=mosquitto.so

Como usar? Darei um exemplo simples para ouvir o tópico “casa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Inicia o cliente
$c = new \Mosquitto\Client;

// Se o seu mosquitto não possuir usuário e senha, basta remover a linha seguinte.
$c->setCredentials('USUARIO_MQTT', 'SENHA_MQTT');

// Conecta no broker/servidor mosquitto
$c->connect('IP_DO_MOSQUITTO');

// Quando usa o "#", você está dizendo que tudo que chegar para o subscribe após a / (barra), ele irá receber.
// Lembrando que você pode subscrever em vários tópicos, basta adicionar uma linha abaixo da outra.
$c->subscribe('casa/#', 0);

// Quando chegar uma mensagem ao subscribe no tópico "casa"
$c->onMessage(function($m) use ($c) {
print_r($m);
});

// Coloca em loop
$c->loopForever(0);

Tudo beleza? Salve o aquivo acima como mqttext.php em algum lugar na sua máquina. Dai, corre no seu terminal e digita o seguinte:

1
php mqttext.php

Envie uma publicação (usando o MQTT.js ou o paho-mqtt ou qualquer outro que você quiser, só para teste) para o canal casa e veja a mágina acontecer.

E para publicar uma mensagem usando a extensão Mosquitto-PHP? Simples também!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Inicia o cliente
$c = new Mosquitto\Client;

// Quando conectar, envia a publicação
$c->onConnect(function() use ($c) {
$c->publish('casa/sala', 'Enviando para a Sala da Casa', 1);
});

// Se o seu mosquitto não possuir usuário e senha, basta remover a linha seguinte.
$c->setCredentials('USUARIO_MQTT', 'SENHA_MQTT');

// Conecta no broker/servidor mosquitto
$c->connect('IP_DO_MOSQUITTO');

for ($i = 0; $i < 100; $i++) {
// Necessário para que a extensão funcione
// Faz um loop até enviar
$c->loop(1);
}

Salve o arquivo acima como mqttpub.php.

Faça um teste mais legal ainda, quando você instalou o broker mosquitto, ele vem com comandos para sub e pub, abra uma nova aba ou janela do seu terminal, e inicie o mosquitto_sub da seguinte maneira:

1
mosquitto_sub -h IP_DO_MOSQUITTO -t casa/# -q 1

Caso tenha usuário e senha

1
mosquitto_sub -h IP_DO_MOSQUITTO -t casa/# -q 1 -u USUARIO -P SENHA

Beleza, ele vai rodar em loop, abra uma nova aba ou janela novamente, e execute o arquivo mqttpub.php que você criou ali em cima.

1
php mqttpub.php

Repare que na aba onde está rodando o mosquitto_sub vai aparecer a mensagem “Enviando para a Sala da Casa“ publicada pelo mqttpub.php uando a extensão Mosquitto-PHP. Doido né?

Quer mais sobre a extensão Mosquitto-PHP? Então, aqui está o Github deles e aqui a documentação.


Dicas por Gercil Junio - https://gercil.me

Proudly powered by Hexo and Theme by Hacker
© 2020 Faz-B Man