Laravel - mqtt・redis・python - Publish


クラウディア 


1. 概要
2. 作成
3. 確認
4. 参考サイト

1. 概要

 「Laravel」側の「Publisher」としてのソースを作成します。

2. 作成

 プロジェクト管理者ユーザで、「Laravel」のプロジェクトホームへ移動して。

php artisan make:controller MqttPublishController

   INFO  Controller [app/Http/Controllers/MqttPublishController.php] created successfully.
 中身が、こういうソースになっています。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class MqttPublishController extends Controller
{
    //
}
 これを下記のように記述します。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redis;

class MqttPublishController extends Controller
{
    public function publish(Request $request)
    {
        $payload = [
            'topic'   => $request->input('topic', 'test/topic'),
            'data'    => base64_encode($request->input('data', 'hello')),
        ];

        Redis::xadd(
            'mqtt_pub',
            '*',
            ['payload' => json_encode($payload, JSON_UNESCAPED_UNICODE)]
        );

        return response()->json(['status' => 'queued']);
    }
}

3. 確認

 上記のソースの動作を確認します。

vi routes/api.php
 下記を記述します。

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\MqttPublishController;

Route::post('/mqtt/publish', [MqttPublishController::class, 'publish']);
 「Python - mqtt・redis」の「Publish」で作成した、「Python」のプログラムで待ち受けます。  「curl」でこの「api」のルートを起動します。

scrum@ubuntu2204 kitayama /var/www/sic_server $ curl -X POST http://localhost/sic_server/api/mqtt/publish -H "Content-Type: application/json" -d '{
    "topic": "test/topic",
    "data": "hello mqtt"
  }'
 すると、「Python」の方に、下記のように表示されます。

topic: test/topic
data: b'hello mqtt'

4. 参考サイト

 本ページは、「ChatGPT」軍曹を参考にさせていただきました。

EaseUS
AbemaTV 無料体験