phpでmqttを利用するにはどうすれば良いでしょうか?
さまざまな方法がありますが、
今回はLaravelでのMQTTメッセージの発行方法を調査しました。
はじめに
前回(MQTT(Mosquitto)サーバの構築の話 2022/05/28)、MQTTサーバのインストールと動作検証を行いました。
最終的な動作環境は下図の様になっております。
この図のメッセージの発行側(送信側)をLaravelへと置き換える方法をまとめます。
ホスト
1 : 開発PC (Laravel動作 MQTTメッセージ発行)
201 : MQTTサーバ
220 : MQTTメッセージ購読
LaravelでMQTTメッセージを発行するライブラリ
LaravelでMQTTメッセージを発行するにはさまざまなライブラリがあります。
今回はphp-mqttにlaravel-clientというのを見つけたのでそれで実装します
php-mqtt laravel-client : https://github.com/php-mqtt/laravel-client
php-mqtt(laravel-client)をインストールする
php-mqtt laravel-clientのインストールはcomposerを用いれば簡単に入ります。
実装プロジェクトのルートに入って、Terminalで以下を実行してください。
composer require php-mqtt/laravel-client
雛形コンフィグをコピーする
cp ./vendor/php-mqtt/laravel-client/config/mqtt-client.php ./config/
これでphp-mqtt laravel-clientを使う準備は完了しました。
MQTTサーバの指定
php-mqtt laravel-clientの設定ファイル(./config/mqtt-client.php)を直接いじっても良いですが、
環境変数:MQTT_HOSTに指定すれば採用してくれますので環境設定ファイル(.env)にてしています。
MQTTサーバは192.168.1.201を指定します。
.envで指定する理由は… .env.testingとか実行環境で分けられるので便利です
MQTT_HOST=192.168.1.201
メッセージ発行プログラムの記述
MQTTサーバの指定まで終わると、
プログラムにメッセージ発行命令を記述すればメッセージは発行されます。
MQTT::publish('test', 'hello php-mqtt!');
例では、
topicを”test”
メッセージ本文は”hello php-mqtt”
今回はメッセージの発行を確認するだけなのでLaravelのデフォルトのwelcomeページを表示するタイミングで発行してみます。
routes/web.php
Route::get('/', function () {
MQTT::publish('test', 'hello php-mqtt!');
return view('welcome');
});
serveして
$ php artisan serve --host 192.168.1.1
ページアクセス : http://192.168.1.1:8000/
これでTOPページにアクセスすると普通にWelcomeページが表示されます。
そのタイミングで今回追記したMQTTサーバへとMQTTメッセージが発行処理がされます
購読端末での動作検証
購読端末(raspberrypi)に入りmosquittoを購読状態とします。
その後に、LaravelのWelcomeページにアクセスします。
すると以下の様にメッセージが購読できることを確認できます。
pi@raspberrypi:~ $ mosquitto_sub -h 192.168.1.201 -t test -d
Client mosqsub|12840-raspberry sending CONNECT
Client mosqsub|12840-raspberry received CONNACK (0)
Client mosqsub|12840-raspberry sending SUBSCRIBE (Mid: 1, Topic: test, QoS: 0)
Client mosqsub|12840-raspberry received SUBACK
Subscribed (mid: 1): 0
Client mosqsub|12840-raspberry received PUBLISH (d0, q0, r0, m0, 'test', ... (15 bytes))
hello php-mqtt!
購読できました!
終いに
今回はLaravelでのMQTTメッセージ発行方法を書きました。
購読は?と思いましたが…
Laravelでは私は発行しか使わないので調べません!
時間があったら調査するかもしれませんが…
次回の記事は…
もちろん購読側をどうするのかですね。
今までの購読側端末をRaspberry piで行なっています。
なのでそのまま購読するプログラムの実装もRaspberry piで調査とします。