MQTTめも

MQTTクライアントはPythonが王道のようですが、やっぱり小馴れたPHPでやりたい!
ということでphpMQTTにて試してみました。

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

  • lib/phpMQTT.php
  • sub.php
  • pub.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

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-09-19 (日) 19:09:33