Manual

do

Maker

.

com

Utilizar MQTT com PHP de forma fácil e rápida

Utilizar MQTT com PHP de forma fácil e rápida

Estou atualmente em um projeto que envolve entre outras coisas, visão computacional, redes neurais e um dos protocolos de transferência de mensagens é o MQTT, onde alguns pontos se subescrevem a um determinado tópico. Na interface de monitoramento as informações chegarão também por MQTT e essa interface está sendo desenvolvida em PHP. Logo, eu antecipei-me ao trabalho do desenvolvedor web e deixei tudo funcional para ele se preocupar exclusivamente com o feedback visual. Então decidi deixar "documentado" o procedimento, mas em forma de artigo, assim vocês também poderão desfrutar da configuração inicial sem preocupações extras.

Broker

Essa é uma configuração client. Se você precisa de um broker MQTT, leia esse artigo onde trato exclusivamente disso.

Client

Se precisa de um client para fazer publish enquanto testando o código abaixo, sugiro o MQTT Dashboard ou o MyMQTT, disponíveis no Google Play.

Instalação dos pacotes necessários

Essa vai ser rápida e fácil, simplesmente utilizando apt e pecl:

#tudo em uma linha soh
apt-get install php5-dev libapache2-mod-php5 apache2\
 libmosquitto-dev libmosquittopp-dev libmosquitto1\
 python-mosquitto re2c

#agora preparar a lib mosquitto pro php:
pecl install Mosquitto-alpha

Se seu sistema acusar mais alguma dependência, supra-a e repita o último passo com o pecl. Feito isso, você deve entrar em /etc/php5 e modificar o php.ini do apache e o php.ini do cli (caso deseje utilizar o mqtt no apache e debugar por linha de comando também). Edite com seu editor preferido (um está no diretório 'apache2' e o outro no diretório 'cli'). Procure pela sessão que exemplifica a adição de biblioteca e adicione essa linha:

extension=mosquitto.so

Agora basta fazer a conexão! Eu deixei um código de um exemplo que achei e adicionei apenas as credenciais que não estavam no exemplo:

<?php
/* ClientID */
$client = new Mosquitto\Client('MyClient');

/* Credenciais (usuario e senha) */
$client->setCredentials('meuUser','minhaSenha');
 
/* Callback da conexao */
$client->onConnect(function($code, $message) use ($client){
    /* Topico */
    $client->subscribe('meuTopico/subTopico', 0);
});
 
/* Callback da mensagem */
$client->onMessage(function($message){
    /* exibe a mensagem e payload */
    echo $message->topic, "\n", $message->payload, "\n";
});
 
/* Connecta ao host remoto */
$client->connect('10.50.66.32', 1883);
 
/* Mantem-se em execucao */
$client->loopForever();

Apenas com essa porção de código já se pode interagir com o broker. Para executar um teste, salve esse código em um arquivo e chame por linha de comando:

php testeComMQTT.php

E publique algo no tópico. Não vou colocar um print porque meus testes estão sendo efetuados com algumas técnicas extras relacionadas ao projeto em que estou trabalhando e essa estrutura não pode ser revelada, mas é fácil como descrito, pode comprovar.

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.  

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.