From 101bb2c632082f64e726192ba8c7758e5512a543 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Mon, 17 Jul 2023 11:58:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=96=B7=E9=9B=BE=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=90=8E=E5=8F=B0=E8=87=AA=E5=8A=A8=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Controllers/DeviceController.php | 15 +++---- app/Console/Commands/MqttPenwuPlan.php | 48 +++++++++++++++++++--- app/Console/Kernel.php | 1 + 3 files changed, 51 insertions(+), 13 deletions(-) diff --git a/app/Admin/Controllers/DeviceController.php b/app/Admin/Controllers/DeviceController.php index 8abac77..1f32319 100644 --- a/app/Admin/Controllers/DeviceController.php +++ b/app/Admin/Controllers/DeviceController.php @@ -2,15 +2,14 @@ namespace App\Admin\Controllers; -use Slowlyo\OwlAdmin\Renderers\{Button, Form, Page, TableColumn, TextControl, Json, Component, CRUDTable, Card, Video, DateRangeControl, Mapping, SelectControl}; +use Slowlyo\OwlAdmin\Renderers\{Button, Form, Page, TableColumn, TextControl, Json, Component, CRUDTable, Card, Video, DateRangeControl, Mapping}; use Slowlyo\OwlAdmin\Controllers\AdminController; use App\Services\Admin\DeviceService; use App\Admin\Components; use App\Models\Device; use App\Models\Keyword; -use App\Models\MeteorologicalDailyReport; -use App\Models\MeteorologicalReport; use App\Models\MonitorMode; +use App\Models\RegionMonitor; use App\Models\Region; use Illuminate\Http\Request; use App\Services\MqttService; @@ -357,7 +356,8 @@ class DeviceController extends AdminController $region = Region::find($regionId); if($region){ $monitorMode = $region->monitorModes()->where('type', MonitorMode::TYPE_ATOMIZING)->first(); - $config = $monitorMode?->pivot->config ?? null; + $device = $monitorMode->devices()->first(); + $config = $device?->extends ?? null; if($monitorMode){ //判断设备状态是否离线; @@ -406,7 +406,7 @@ class DeviceController extends AdminController 'config' => '${config}' ] ]) - ->data($config ? json_decode($config) : []) + ->data($config ? $config : []) ->body([ amisMake()->FieldSetControl()->title('当前状态')->body([ amisMake()->TextControl('status', '状态')->value($statusStr), @@ -456,8 +456,9 @@ class DeviceController extends AdminController if($region){ $monitorMode = $region->monitorModes()->where('type', MonitorMode::TYPE_ATOMIZING)->first(); $config = $request->input() ?? null; - $res = $region->monitorModes()->updateExistingPivot($monitorMode->id, [ - 'config' => $config, + + $res = $monitorMode->devices()->update([ + 'extends' => $config, ]); } } diff --git a/app/Console/Commands/MqttPenwuPlan.php b/app/Console/Commands/MqttPenwuPlan.php index 886462d..05fe193 100644 --- a/app/Console/Commands/MqttPenwuPlan.php +++ b/app/Console/Commands/MqttPenwuPlan.php @@ -2,6 +2,10 @@ namespace App\Console\Commands; +use App\Models\Device; +use App\Models\MonitorMode; +use App\Models\RegionMonitor; +use App\Services\MqttService; use Illuminate\Console\Command; class MqttPenwuPlan extends Command @@ -18,7 +22,7 @@ class MqttPenwuPlan extends Command * * @var string */ - protected $description = 'MQTT 喷雾控制';//-todo + protected $description = 'MQTT 喷雾控制'; /** * Execute the console command. @@ -27,11 +31,43 @@ class MqttPenwuPlan extends Command */ public function handle() { - //获取所有喷雾监控点,对应的自动喷雾配置 - //获取当前时间(时,分) - //判断该配置是否开启 - //判断当前该情况,并判断时间,决定开启,关闭,不作为; - + //首先获取当前状态 + $service = new MqttService(); + $status = $service->getStatus(); + //判断是否离线,或者状态异常; + if($status && $status['error'] == 0 && $status['status'] == 1){ + //获取所有喷雾监控点,对应的自动喷雾配置 + $deviceList = Device::where('type', Device::TYPE_ATOMIZING)->get(); + $time = now()->format('H:i');//获取当前时间(时,分) + foreach($deviceList as $device){ + $_config = $device->extends ?? []; + if($_config && $_config['is_enable']){//判断该配置是否开启 + foreach($_config['config'] as $item){ + list($start, $end) = explode(',', $item['time_zone']); + //决定开启,关闭, + if($time == $start){//相等 + //如果当前对应位置已开启,则不作为 + if( + ($item['value'] == 'a' && $status['yv1'] == 0) + ||($item['value'] == 'b' && $status['yv2'] == 0) + ){ + $service->open($item['value'], $item['input']); + } + }elseif($time == $end){ + if($status['is_running']){ + if( + ($item['value'] == 'a' && $status['yv1'] == 1) + ||($item['value'] == 'b' && $status['yv2'] == 1) + ){ + $service->close(); + } + } + } + } + } + } + } + return Command::SUCCESS; } } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index d8bc1d2..55247d9 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -16,6 +16,7 @@ class Kernel extends ConsoleKernel protected function schedule(Schedule $schedule) { // $schedule->command('inspire')->hourly(); + $schedule->command('mqtt:penwu-plan')->everyMinute();//每分钟执行 } /**