Sfoglia il codice sorgente

测试用代码,测mqtt。之后项目如果顺利,一定会用到

gogs 2 mesi fa
parent
commit
c5d13c5552

+ 79 - 0
app/Console/Commands/MqttSubscriber.php

@@ -0,0 +1,79 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use PhpMqtt\Client\MqttClient;
+use PhpMqtt\Client\ConnectionSettings;
+class MqttSubscriber extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'mqtt:subscribe';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Command description';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $server   = '47.111.77.194';
+        $port     = 1883;
+        $clientId = 'laravel_backend_worker';
+
+        $mqtt = new MqttClient($server, $port, $clientId);
+
+        $settings = (new ConnectionSettings)
+            ->setUsername('php_server_user')
+            ->setPassword('sEcrEt_pAss_123');
+
+        $this->info("正在连接到 MQTT Broker...");
+
+        $mqtt->connect($settings, true);
+
+        // 订阅主题
+        $mqtt->subscribe('/wy/119/RealtimeData/DT5/yonglidev1', function ($topic, $message) {
+            $this->info("收到消息: $message");
+
+            $data = json_decode($message, true);
+
+            if (isset($data['total_work'])) {
+                // 利用 Laravel 的模型直接入库
+                $hours = round($data['total_work'] / 60, 2);
+
+//                WorkLog::create([
+//                    'device_id' => $data['device_id'] ?? 'unknown',
+//                    'minutes'   => $data['total_work'],
+//                    'hours'     => $hours,
+//                    'raw_data'  => $message,
+//                ]);
+
+                $this->info("数据已入库: {$hours} 小时");
+            }
+        }, 0);
+
+        // 开始死循环监听
+        $mqtt->loop(true);
+    }
+}

+ 10 - 1
app/Http/Controllers/Api/TestController.php

@@ -10,11 +10,20 @@ use App\Exports\ProjectDepreciationMultipleSheetExport;
 use App\Exports\ResearchExpenseMultipleSheetExport;
 use App\Exports\ResearchExpenseSummaryMultipleSheetExport;
 use Maatwebsite\Excel\Facades\Excel;
+use PhpMqtt\Client\MqttClient;
+// --- 必须引入以下两个 MQTT 相关的类 ---
+use PhpMqtt\Client\ConnectionSettings;
 
 class TestController extends BaseController
 {
     public function aa(){
-         return $this->exportSummary();
+//         return $this->exportSummary();
+        $mqtt = new MqttClient('47.111.77.194', 1883, 'web_publisher');
+        $mqtt->connect((new ConnectionSettings)->setUsername('yonglidev1')->setPassword('tZjUw0kQ'));
+        $mqtt->publish('/wy/119/RealtimeData/DT5/yonglidev1', json_encode(['cmd' => 'reset']), 0);
+        $mqtt->disconnect();
+
+        return response()->json(['status' => '指令已下发']);
     }
 
     public function itemSalary(){

+ 1 - 0
routes/api.php

@@ -15,6 +15,7 @@ use Illuminate\Http\Request;
 
 //登录
 Route::any('login', 'Api\LoginController@login');
+Route::any('aa', 'Api\TestController@aa');
 //文件获取
 Route::any('uploadFiles/{file_name}', 'Api\FileUploadController@getFile');
 Route::any('getExport/{file_name}','Api\ExportFileController@getExport');