diff --git a/application/api/controller/Smartlock.php b/application/api/controller/Smartlock.php index 956e8a0..c8f2cb0 100644 --- a/application/api/controller/Smartlock.php +++ b/application/api/controller/Smartlock.php @@ -2,6 +2,7 @@ namespace app\api\controller; +use app\common\SzxfjkSdk\SmartLocks; use app\common\YingShiSdk\YingShiSdk; use think\Request; @@ -63,4 +64,29 @@ class Smartlock extends Base } } + /** + * 智能门锁-设备实时上报数据 + * @param Request $request + * @return false|string + */ + public function smartLocks(Request $request) + { + + try { + $deviceInfo = YingShiSdk::DeviceInfo('','',true); + if (!is_array($deviceInfo)) throw new \Exception($deviceInfo); + + $deviceStatus = YingShiSdk::DeviceStatus('','',true); + if (!is_array($deviceStatus)) throw new \Exception($deviceStatus); + + $param = array_merge($deviceInfo,$deviceStatus); + + $pushRes = SmartLocks::TimingDataPush($param); + if (!$pushRes['status']) throw new \Exception($pushRes['msg']); + + return $this->jsonSuccess(); + } catch (\Exception $exception) { + return $this->jsonError($exception->getMessage()); + } + } } \ No newline at end of file diff --git a/application/common/SzxfjkSdk/SmartLocks.php b/application/common/SzxfjkSdk/SmartLocks.php new file mode 100644 index 0000000..3398529 --- /dev/null +++ b/application/common/SzxfjkSdk/SmartLocks.php @@ -0,0 +1,103 @@ + $param['deviceSerial'],//设备唯一标识 + 'pk' => '',//产品型号 + 'did' => $param['deviceSerial'],//设备编号 + 'deviceType' => $param['deviceName'],//设备类型 + 'deviceModel' => $param['model'],//设备型号 + 'uid' => '',//关联编号(人员或方案) + 'dtype' => '',//数据类型(实时上报、报警上报) + 'site' => '',//安装地址 + 'longitude' => '',//经度(当设备无定位芯片时,则字段不显示) + 'latitude' => '',//纬度(当设备无定位芯片时,则字段不显示) + 'companyName' => '',//设备供应商名称 + 'timestamp' => date("Y-m-d H:i:s.v"),//数据上传时间 + 'data' => [ + 'onlineStatus' => $param['status'],//在线状态//0 为在线,1 为离线 + 'quantityElectricity' => $param['battryStatus'],//电量 + 'alarmReason' => '',//报警原因 + 'alarmType' => '',//报警类型 + 'eventName' => '',//事件名称 + 'eventType' => '',//事件类型(0:测试报警,1:正式报警) + 'alarmTime' => '',//报警时间 + ],//数据内容 + ]; + + $result = self::curlPost($requestUrl, $data); + + if ($result['success'] === true) { + return ['status' => 1,'msg' => '推送成功']; + } + + return ['status' => 0,'msg' => '推送失败']; + } + + /** + * post请求 + * @param $url + * @param array $data + * @return bool|string + */ + protected static function curlPost($url, array $data) + { + $dataJson = json_encode($data); + + $curl = curl_init(); + + curl_setopt_array($curl, [ + CURLOPT_PORT => "30014", + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_ENCODING => "", + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 30, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_CUSTOMREQUEST => "POST", + CURLOPT_POSTFIELDS => $dataJson, + CURLOPT_HTTPHEADER => [ + "content-type: application/json" + ], + ]); + + $response = curl_exec($curl); + $err = curl_error($curl); + + curl_close($curl); + + if ($err) { + return $err; + } else { + return json_decode($response, true); + } + } + +} \ No newline at end of file diff --git a/application/common/YingShiSdk/YingShiSdk.php b/application/common/YingShiSdk/YingShiSdk.php index 5165fe9..08723da 100644 --- a/application/common/YingShiSdk/YingShiSdk.php +++ b/application/common/YingShiSdk/YingShiSdk.php @@ -52,28 +52,36 @@ class YingShiSdk if ($jsonResponse['code'] != '200') return $jsonResponse['msg']; self::$accessToken = $jsonResponse['data']['accessToken']; + + return $jsonResponse['data']['accessToken']; } /** * 获取设备状态信息 * @param $accessToken * @param $deviceSerial + * @param bool $autoGet * @return mixed|string */ - public static function DeviceStatus($accessToken,$deviceSerial) + public static function DeviceStatus($accessToken,$deviceSerial,$autoGet = false) { $url = 'https://open.ys7.com/api/lapp/device/status/get'; - $curlData = self::curlYingshiApi($url,[ + $requestData = [ 'accessToken' => $accessToken, 'deviceSerial' => $deviceSerial - ]); + ]; + if ($autoGet) { + $requestData['accessToken'] = self::getAccessToken(); + $requestData['deviceSerial'] = self::$deviceSerial; + } + $curlData = self::curlYingshiApi($url,$requestData); $err = $curlData['err']; $response = $curlData['response']; - if ($err) return "cURL Error #:" . $err; + if ($err) return $err; $jsonResponse = json_decode($response,true); @@ -86,21 +94,26 @@ class YingShiSdk * 获取单个设备信息 * @param $accessToken * @param $deviceSerial + * @param bool $autoGet * @return mixed|string */ - public static function DeviceInfo($accessToken,$deviceSerial) + public static function DeviceInfo($accessToken,$deviceSerial,$autoGet = false) { $url = 'https://open.ys7.com/api/lapp/device/info'; - - $curlDataInfo = YingShiSdk::curlYingshiApi($url,[ + $requestData = [ 'accessToken' => $accessToken, 'deviceSerial' => $deviceSerial - ]); + ]; + if ($autoGet) { + $requestData['accessToken'] = self::getAccessToken(); + $requestData['deviceSerial'] = self::$deviceSerial; + } + $curlDataInfo = YingShiSdk::curlYingshiApi($url,$requestData); $err = $curlDataInfo['err']; - if ($err) return "cURL Error #:" . $err; + if ($err) return $err; $response = $curlDataInfo['response'];