From ef8579d0172563533872610670d61b569711cf1f Mon Sep 17 00:00:00 2001 From: chenbo <709206448@qq.com> Date: Sat, 23 Dec 2023 10:21:59 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=8E=A8=E9=80=81=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=90=8D=E5=92=8C=E8=AE=BE=E5=A4=87id=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/controller/DataCollectController.php | 90 +++++++++----------- 1 file changed, 41 insertions(+), 49 deletions(-) diff --git a/app/api/controller/DataCollectController.php b/app/api/controller/DataCollectController.php index 2055cd3d..cdc389e3 100644 --- a/app/api/controller/DataCollectController.php +++ b/app/api/controller/DataCollectController.php @@ -25,15 +25,18 @@ class DataCollectController extends BaseApiController if(!$parmas || !isset($parmas['username']) || $parmas['username']==''){ return $this->fail('参数错误'); } - $land = explode('_', $parmas['username']); // 命名规则:land_id id土地表主键id + $device = explode('_', $parmas['topic']); // 命名规则:camera_deviceid deviceid为设备主键id + $productDevice = ProductDevice::where('device_id', $device[1])->find(); + $landProduct = LandProduct::where('product_id', $productDevice['product_id'])->find(); + $payload= json_decode($parmas['payload'], true); + $landId = $landProduct['land_id']; + $deviceId = $device[1]; // mqtt服务端 消息发布事件 if ($parmas['event'] == 'message.publish') { - $payload= json_decode($parmas['payload'], true); - $device = explode('_', $parmas['topic']); // 命名规则:topic_deviceid deviceid为设备主键id $data = [ - 'land_id' => $land[3], - 'device_id'=>$device[1], + 'land_id' => $landId, + 'device_id' => $deviceId, 'qos'=>$parmas['qos'], 'wind_speed' => $payload['wind_speed'], 'wind_direction' => $payload['wind_direction'], @@ -61,45 +64,45 @@ class DataCollectController extends BaseApiController $monitorThreshold = (new MonitorThreshold())->select()->toArray()[0]; // 风速告警 if ($payload['wind_speed'] > $monitorThreshold['wind_speed_max']) { - self::createAlarm($land[3], $device[1], 'wind_speed', '风速偏快' ,$payload['wind_speed']); + self::createAlarm($landId, $device[1], 'wind_speed', '风速偏快' ,$payload['wind_speed']); } // ambient_temperature 环境温度 if ($payload['ambient_temperature'] < $monitorThreshold['air_temp_min']) { - self::createAlarm($land[3], $device[1], 'ambient_temperature', '气温偏低' ,$payload['ambient_temperature']); + self::createAlarm($landId, $device[1], 'ambient_temperature', '气温偏低' ,$payload['ambient_temperature']); } // ambient_temperature 环境温度 if ($payload['ambient_temperature'] > $monitorThreshold['air_temp_max']) { - self::createAlarm($land[3], $device[1], 'ambient_temperature', '气温偏高' ,$payload['ambient_temperature']); + self::createAlarm($landId, $device[1], 'ambient_temperature', '气温偏高' ,$payload['ambient_temperature']); } // ambient_humidity 环境湿度 if ($payload['ambient_humidity'] < $monitorThreshold['air_mois_min']) { - self::createAlarm($land[3], $device[1], 'ambient_humidity', '环境湿度偏低' ,$payload['ambient_humidity']); + self::createAlarm($landId, $device[1], 'ambient_humidity', '环境湿度偏低' ,$payload['ambient_humidity']); } // ambient_humidity 环境湿度 if ($payload['ambient_humidity'] < $monitorThreshold['air_mois_max']) { - self::createAlarm($land[3], $device[1], 'ambient_humidity', '环境湿度偏高' ,$payload['ambient_humidity']); + self::createAlarm($landId, $device[1], 'ambient_humidity', '环境湿度偏高' ,$payload['ambient_humidity']); } // carbon_dioxide 二氧化碳含量 if ($payload['carbon_dioxide'] > $monitorThreshold['air_co2_content_max']) { - self::createAlarm($land[3], $device[1], 'carbon_dioxide', '空气二氧化碳含量偏高' ,$payload['carbon_dioxide']); + self::createAlarm($landId, $device[1], 'carbon_dioxide', '空气二氧化碳含量偏高' ,$payload['carbon_dioxide']); } // carbon_dioxide 二氧化碳含量 if ($payload['carbon_dioxide'] < $monitorThreshold['air_co2_content_min']) { - self::createAlarm($land[3], $device[1], 'carbon_dioxide', '空气二氧化碳含量偏低' ,$payload['carbon_dioxide']); + self::createAlarm($landId, $device[1], 'carbon_dioxide', '空气二氧化碳含量偏低' ,$payload['carbon_dioxide']); } // ambient_air_pressure 大气压力 if ($payload['ambient_air_pressure'] >= 120) { - self::createAlarm($land[3], $device[1], 'ambient_air_pressure', '大气压力偏高' ,$payload['ambient_air_pressure']); + self::createAlarm($landId, $device[1], 'ambient_air_pressure', '大气压力偏高' ,$payload['ambient_air_pressure']); } if ($payload['ambient_air_pressure'] < 10) { - self::createAlarm($land[3], $device[1], 'ambient_air_pressure', '大气压力偏低' ,$payload['ambient_air_pressure']); + self::createAlarm($landId, $device[1], 'ambient_air_pressure', '大气压力偏低' ,$payload['ambient_air_pressure']); } // rainfall 雨量 @@ -108,11 +111,11 @@ class DataCollectController extends BaseApiController // soil_temperature 土壤温度 if ($payload['soil_temperature'] >= $monitorThreshold['soil_temp_max']) { - self::createAlarm($land[3], $device[1], 'soil_temperature', '土壤温度偏高' ,$payload['soil_temperature']); + self::createAlarm($landId, $device[1], 'soil_temperature', '土壤温度偏高' ,$payload['soil_temperature']); } // soil_temperature 土壤温度 if ($payload['soil_temperature'] < $monitorThreshold['soil_temp_min']) { - self::createAlarm($land[3], $device[1], 'soil_temperature', '土壤温度偏低' ,$payload['soil_temperature']); + self::createAlarm($landId, $device[1], 'soil_temperature', '土壤温度偏低' ,$payload['soil_temperature']); } // soil_conductivity 土壤电导率 @@ -125,42 +128,42 @@ class DataCollectController extends BaseApiController // soil_conductivity 土壤湿度 if ($payload['soil_moisture'] < $monitorThreshold['soil_mois_max']) { - self::createAlarm($land[3], $device[1], 'soil_moisture', '土壤湿度偏高' ,$payload['soil_moisture']); + self::createAlarm($landId, $device[1], 'soil_moisture', '土壤湿度偏高' ,$payload['soil_moisture']); } if ($payload['soil_moisture'] < $monitorThreshold['soil_mois_min']) { - self::createAlarm($land[3], $device[1], 'soil_moisture', '土壤湿度偏低' ,$payload['soil_moisture']); + self::createAlarm($landId, $device[1], 'soil_moisture', '土壤湿度偏低' ,$payload['soil_moisture']); } // soil_PH 土壤ph值 if ($payload['soil_PH'] < $monitorThreshold['soil_ph_max']) { - self::createAlarm($land[3], $device[1], 'soil_PH', '土壤PH值偏碱性' ,$payload['soil_moisture']); + self::createAlarm($landId, $device[1], 'soil_PH', '土壤PH值偏碱性' ,$payload['soil_moisture']); } if ($payload['soil_PH'] < $monitorThreshold['soil_ph_min']) { - self::createAlarm($land[3], $device[1], 'soil_PH', '土壤PH值偏酸性' ,$payload['soil_moisture']); + self::createAlarm($landId, $device[1], 'soil_PH', '土壤PH值偏酸性' ,$payload['soil_moisture']); } // soil_potassium_phosphate_nitrogen 土壤磷酸钾:氮 if ($payload['soil_potassium_phosphate_nitrogen'] < $monitorThreshold['soil_n_content_max']) { - self::createAlarm($land[3], $device[1], 'soil_potassium_phosphate_nitrogen', '土壤磷酸钾-含氮量偏高' ,$payload['soil_potassium_phosphate_nitrogen']); + self::createAlarm($landId, $device[1], 'soil_potassium_phosphate_nitrogen', '土壤磷酸钾-含氮量偏高' ,$payload['soil_potassium_phosphate_nitrogen']); } if ($payload['soil_potassium_phosphate_nitrogen'] < $monitorThreshold['soil_n_content_min']) { - self::createAlarm($land[3], $device[1], 'soil_potassium_phosphate_nitrogen', '土壤磷酸钾-含氮量偏低' ,$payload['soil_potassium_phosphate_nitrogen']); + self::createAlarm($landId, $device[1], 'soil_potassium_phosphate_nitrogen', '土壤磷酸钾-含氮量偏低' ,$payload['soil_potassium_phosphate_nitrogen']); } // soil_potassium_phosphate_phosphorus 土壤磷酸钾:磷 if ($payload['soil_potassium_phosphate_phosphorus'] < $monitorThreshold['soil_p_content_max']) { - self::createAlarm($land[3], $device[1], 'soil_potassium_phosphate_phosphorus', '土壤磷酸钾-含磷量偏高' ,$payload['soil_potassium_phosphate_phosphorus']); + self::createAlarm($landId, $device[1], 'soil_potassium_phosphate_phosphorus', '土壤磷酸钾-含磷量偏高' ,$payload['soil_potassium_phosphate_phosphorus']); } if ($payload['soil_potassium_phosphate_phosphorus'] < $monitorThreshold['soil_p_content_min']) { - self::createAlarm($land[3], $device[1], 'soil_potassium_phosphate_phosphorus', '土壤磷酸钾-含磷量偏低' ,$payload['soil_potassium_phosphate_phosphorus']); + self::createAlarm($landId, $device[1], 'soil_potassium_phosphate_phosphorus', '土壤磷酸钾-含磷量偏低' ,$payload['soil_potassium_phosphate_phosphorus']); } // soil_potassium_phosphate_potassium 土壤磷酸钾:钾 if ($payload['soil_potassium_phosphate_potassium'] < $monitorThreshold['soil_k_content_max']) { - self::createAlarm($land[3], $device[1], 'soil_potassium_phosphate_potassium', '土壤磷酸钾-含钾量偏高' ,$payload['soil_potassium_phosphate_potassium']); + self::createAlarm($landId, $device[1], 'soil_potassium_phosphate_potassium', '土壤磷酸钾-含钾量偏高' ,$payload['soil_potassium_phosphate_potassium']); } if ($payload['soil_potassium_phosphate_potassium'] < $monitorThreshold['soil_k_content_min']) { - self::createAlarm($land[3], $device[1], 'soil_potassium_phosphate_potassium', '土壤磷酸钾-含钾量偏低' ,$payload['soil_potassium_phosphate_potassium']); + self::createAlarm($landId, $device[1], 'soil_potassium_phosphate_potassium', '土壤磷酸钾-含钾量偏低' ,$payload['soil_potassium_phosphate_potassium']); } return $this->success('接收成功', ['user_name'=>$parmas['username'], 'topic'=>$parmas['topic']]); @@ -168,34 +171,23 @@ class DataCollectController extends BaseApiController // mqtt服务端 连接断开事件 客户端断开表示该土块的所有设备都已断开 共用同一个mqtt客户端 if ($parmas['event'] == 'client.disconnected') { - // 查询该土地关联的设备 - $landProduct = LandProduct::where('land_id', $land[3])->find(); - $productDevice = ProductDevice::where('product_id', $landProduct['product_id'])->select(); - foreach ($productDevice as $item) { - $addData = [ - 'land_id' => $land[3], - 'device_id' => $item['device_id'], - 'last_online_time' => $parmas['disconnected_at']/1000, - 'disconnected_time' => $parmas['disconnected_at']/1000, - 'create_time' => time(), - 'update_time' => time() - ]; - DeviceOffline::create($addData); - Device::where('id', $item['device_id'])->update(['is_online' => 2]); - } + // 查询该土地关联的设备 + $addData = [ + 'land_id' => $landId, + 'device_id' => $deviceId, + 'last_online_time' => $parmas['disconnected_at']/1000, + 'disconnected_time' => $parmas['disconnected_at']/1000, + 'create_time' => time(), + 'update_time' => time() + ]; + DeviceOffline::create($addData); + Device::where('id', $deviceId)->update(['is_online' => 2]); return $this->success('接收成功'); } // 连接链接事件 设备已上线 if ($parmas['event'] == 'client.connected') { - // 查询该土地关联的设备 - $landProduct = LandProduct::where('land_id', $land[3])->find(); - $productDevice = ProductDevice::where('product_id', $landProduct['product_id'])->select(); - // 如果该设备之前离线,现在重新上线则删除之前的设备离线记录 - DeviceOffline::where('land_id', $land[3])->delete(); - foreach ($productDevice as $item) { - Device::where('id', $item['device_id'])->update(['is_online' => 1]); - } + Device::where('id', $deviceId)->update(['is_online' => 1]); return $this->success('接收成功'); }