MQTTクライアントはPythonが王道のようですが、やっぱり小馴れたPHPでやりたい! 必要なファイルは phpMQTT.php のみです。
phpMQTT.phpの修正 †3行目あたり 意味不明のnamespaceをコメントします。 //namespace Bluerhinos; 205行目あたり 固定ヘッダが違うようなので、修正します。 //$cmd = 0x80; $cmd = 0x82; sub.php †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 †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"; } 動作確認 †コンソールにてバックグラウンドでsubscriberを起動します。 $ nohup php sub.php > out.log & 別コンソールにてpublisherを起動します。 $ php pub.php out.logにメッセージが記録されていれば成功です。 subscriberの停止はプロセスをkillします。 $ kill PID |