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();//每分钟执行 } /**