1. 導入 Go 語言撰寫的 MQTT Gateway (mqtt-gateway/),負責訊息接收並透過 Redis List 轉發至 Laravel。 2. 更新 compose.yaml 以包含 EMQX Broker 與 mqtt-gateway 服務,並配置相關環境變數。 3. 新增 ListenMqttQueue 指令與對應的異步處理 Job (ProcessHeartbeat, ProcessTransaction, ProcessMachineError)。 4. 實作 MqttSyncAuth 指令與 Machine Model Observer,支援自動化的機台認證資訊同步至 Redis。 5. 新增 MqttCommandService 用於處理雲端至機台的即時指令下發。 6. 更新專案規範文件 (framework.md 與 Skills) 以反映新的 MQTT 通訊機制與安全性規範。 7. 提供 simulate-heartbeat.sh 指令碼以供開發與測試使用。
46 lines
1.1 KiB
PHP
46 lines
1.1 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
use App\Models\Machine\Machine;
|
|
use App\Services\Machine\MachineService;
|
|
|
|
class MqttSyncAuth extends Command
|
|
{
|
|
/**
|
|
* The name and signature of the console command.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = 'mqtt:sync-auth';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'Sync all machine API tokens to Redis for MQTT authentication';
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*/
|
|
public function handle(MachineService $machineService)
|
|
{
|
|
$machines = Machine::withoutGlobalScopes()->get();
|
|
$this->info("Syncing " . $machines->count() . " machines to Redis...");
|
|
|
|
$bar = $this->output->createProgressBar($machines->count());
|
|
$bar->start();
|
|
|
|
foreach ($machines as $machine) {
|
|
$machineService->syncMqttAuth($machine);
|
|
$bar->advance();
|
|
}
|
|
|
|
$bar->finish();
|
|
$this->newLine();
|
|
$this->info("Sync completed.");
|
|
}
|
|
}
|