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
4Distributor 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 Cli1
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 FPM1
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 | // Inicia o cliente |
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 senha1
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