[[MQTTめも]]

MQTTクライアントはPythonが王道のようですが、やっぱり小馴れたPHPでやりたい!~
ということで[[phpMQTT:https://github.com/bluerhinos/phpMQTT]]にて試してみました。

必要なファイルは phpMQTT.php のみです。

-lib/phpMQTT.php
-sub.php
-pub.php

*phpMQTT.phpの修正 [#j1aafd60]

3行目あたり 意味不明のnamespaceをコメントします。

 //namespace Bluerhinos;

205行目あたり 固定ヘッダが違うようなので、修正します。

 //$cmd = 0x80;
 $cmd = 0x82;

*sub.php [#y0c8d693]

subscriber側のプログラム

 <?php
 
 require_once "lib/phpMQTT.php";
 
 $server = "127.0.0.1";
 $port = 1883;
 $username = "";
 $password = "";
 $client_id = "phpMQTT-subscriber"; // make sure this is unique for connecting to sever - you could use uniqid()
 
 $mqtt = new phpMQTT($server, $port, $client_id);
 
 if (!$mqtt->connect(true, NULL, $username, $password)) {
     exit(1);
 }
 
 $topics['topics/test'] = array("qos" => 0, "function" => "procmsg");
 $mqtt->subscribe($topics, 0);
 
 while ($mqtt->proc()) {
     
 }
 
 $mqtt->close();
 
 function procmsg($topic, $msg){
     echo "Msg Recieved: " . date("r") . "\n";
     echo "Topic: {$topic}\n\n";
     echo "\t$msg\n\n";
 }

*pub.php [#d6ee18af]

publisher側のプログラム

 <?php
 
 require_once "lib/phpMQTT.php";
 
 $server = "127.0.0.1";
 $port = 1883;
 $username = "";
 $password = "";
 $client_id = "phpMQTT-publisher"; // make sure this is unique for connecting to sever - you could use uniqid()
 
 $mqtt = new phpMQTT($server, $port, $client_id);
 
 if ($mqtt->connect(true, NULL, $username, $password)) {
     $mqtt->publish("topics/test", "Hello World! at " . date("r"), 0);
     $mqtt->close();
     echo "Published\n";
 } else {
     echo "Time out!\n";
 }

*動作確認 [#sbd85ed1]

コンソールにてバックグラウンドでsubscriberを起動します。

 $ nohup php sub.php > out.log &

別コンソールにてpublisherを起動します。

 $ php pub.php

out.logにメッセージが記録されていれば成功です。

subscriberの停止はプロセスをkillします。

 $ kill PID

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS