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

MQTT
MQTT

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 newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!

Djames Suhanko

Sobre o autor: Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Deixe uma resposta