LaravelにてMQTTメッセージを発行する方法の話

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で調査とします。