array:10 [ "applicationID" => "2" // 应用ID "applicationName" => "cloud2" // 应用名称 "data" => "A3sAAA==" "devEUI" => "24e124126c481114" // 设备EUI "deviceName" => "设备二" // 设备名称 "fCnt" => 6 // 帧计数 "fPort" => 85 // 应用端口 "rxInfo" => array:1 [ 0 => array:8 [ "altitude" => 0 // 网关海拔 "latitude" => 0 // 网关经度 "longitude" => 0 // 网关纬度 "loRaSNR" => 13.2 // 信噪比 "mac" => "24e124fffef7887c" // 网关ID "name" => "Local Gateway" // 网关名称 "rssi" => -24 // 信号强度 (dBm) "time" => "2023-08-03T05:47:47.337673Z" ] ] "time" => "2023-08-03T05:47:47.337673Z" "txInfo" => array:4 [ // 节点信息 "adr" => true // 设备ADR状态 "codeRate" => "4/5" // 编码率 "dataRate" => array:3 [ "bandwidth" => 125 // 带宽 "modulation" => "LORA" // LORA调制 "spreadFactor" => 7 // 扩频因子 ] "frequency" => 473300000 // 使用频率 ] ] "pressure" => 0 ] * *温度传感器数据 * * ["obj" => array:10 [ "applicationID" => "1" "applicationName" => "cloud" "data" => "A2cAAQ==" "devEUI" => "24e124126d054217" "deviceName" => "设备一" "fCnt" => 983 "fPort" => 85 "rxInfo" => array:1 [ 0 => array:8 [ "altitude" => 0 "latitude" => 0 "loRaSNR" => 13.5 "longitude" => 0 "mac" => "24e124fffef7887c" "name" => "Local Gateway" "rssi" => -31 "time" => "2023-08-02T09:50:44.880803Z" ] ] "time" => "2023-08-02T09:50:44.880803Z" "txInfo" => array:4 [ "adr" => true "codeRate" => "4/5" "dataRate" => array:3 [ "bandwidth" => 125 "modulation" => "LORA" "spreadFactor" => 7 ] "frequency" => 471900000 ] ] "temperature" => 25.6 ] * * */ public static function saveData($data){ try{ $time = time(); $dev_eui = $data['obj']['devEUI']; $device_name = $data['obj']['deviceName']; $source_ip = self::getIP(); //保存数据 if(isset($data['temperature']) && isset($data['humidity'])){ $insert[] = [ 'dev_eui' => $dev_eui . '1', 'device_name' => $device_name, 'source_ip' => $source_ip, 'data_type' => 4, 'happening_data' => $data['temperature'], 'crt_time' => $time, ]; $insert[] = [ 'dev_eui' => $dev_eui . '2', 'device_name' => $device_name, 'source_ip' => $source_ip, 'data_type' => 4, 'happening_data' => $data['humidity'], 'crt_time' => $time, ]; DeviceData::insert($insert); }else{ $model = new DeviceData(); // $model->data = json_encode($data);//源数据 $model->dev_eui = $dev_eui; $model->device_name = $device_name; $model->source_ip = $source_ip; if(isset($data['temperature'])){ $model->data_type = 1; $model->happening_data = $data['temperature']; }elseif (isset($data['pressure'])){ $model->data_type = 2; $model->happening_data = $data['pressure']; } $model->save(); } }catch (\Exception $exception){ file_put_contents('record_errors.txt',json_encode($data) . PHP_EOL . $exception->getFile().$exception->getLine().$exception->getCode(),8); } } public static function clearData($data){ $return['is_clear_data'] = 1; $return['dev_eui'] = $data['obj']['devEUI'] ?? ''; if(isset($data['temperature']) && isset($data['humidity'])){ $return['multiple'] = [ $return['dev_eui'] . '1' => $data['temperature'], $return['dev_eui'] . '2' => $data['humidity'], ]; }elseif(isset($data['temperature'])){ $return['value'] = $data['temperature']; }elseif (isset($data['pressure'])){ $return['value'] = round($data['pressure'] / 1000,2); }else{ $return['value'] = 0; } return $return; } public static function getUrl($data){ //根据业务将数据发送到对应的地址 // 温度传感器数据包含temperature 字段 压力传感器包含pressure 字段 $url = 'http://fyy_api.qingyaokeji.com/api/testData'; $url = ''; return $url; } public static function getIP(){ if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_REAL_IP')) { $ip = getenv('HTTP_X_REAL_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); $ips = explode(',', $ip); $ip = $ips[0]; } elseif (getenv('REMOTE_ADDR')) { $ip = getenv('REMOTE_ADDR'); } else { $ip = '0.0.0.0'; } return $ip; } //"status": "error", // "userType": null, // "userDto": null, // "token": null, // "errorMessage": "用户名或密码不正确", // "brushFaceFlag": false, // "brushFaceValidationResult": null public static function getToken(){ $token_key = 'big_king_login_token'; $token = Redis::get($token_key); if(! $token){ $url = config('ip.zs'); $post = array("name" => "admin","password"=>"admin","rememberMe"=>true); $header = ['Content-Type:application/json']; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url . 'jbl/api/mes/login', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode($post), CURLOPT_HTTPHEADER => $header, )); $response = curl_exec($curl); curl_close($curl); $result = json_decode($response,true); if(empty($result['token'])) { file_put_contents('big_king_token_error.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL,8); return [false,'']; }else{ $token = $result['token']; $expire_time = 1728000; //20天 Redis::set($token_key,$token); Redis::expire($token_key, $expire_time); return [true,$token]; } } return [true,$token]; } public static function getTokenCs(){ $token_key = 'big_king_login_token_cs'; $token = Redis::get($token_key); if(! $token){ $url = config('ip.cs'); $post = array("name" => "admin","password"=>"admin","rememberMe"=>true); $header = ['Content-Type:application/json']; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url . 'jbl/api/mes/login', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode($post), CURLOPT_HTTPHEADER => $header, )); $response = curl_exec($curl); curl_close($curl); $result = json_decode($response,true); if(empty($result['token'])) { file_put_contents('big_king_token_error_cs.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL,8); return [false,'']; }else{ $token = $result['token']; $expire_time = 1728000; //20天 Redis::set($token_key,$token); Redis::expire($token_key, $expire_time); return [true,$token]; } } return [true,$token]; } public static function getTokenLf(){ $token_key = 'lf_device_token'; $token = Redis::get($token_key); if(! $token){ $url = config('ip.zslf'); $post = array("name" => "admin","password"=>"gzy#12345","rememberMe"=>true); $header = ['Content-Type:application/json']; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url . 'jbl/api/mes/login', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_SSL_VERIFYPEER => false, CURLOPT_POSTFIELDS => json_encode($post), CURLOPT_HTTPHEADER => $header, )); $response = curl_exec($curl); if ($response === false) { // 获取错误号 $errorNumber = curl_errno($curl); // 获取错误信息 $errorMessage = curl_error($curl); $message = "cURL Error #{$errorNumber}: {$errorMessage}"; file_put_contents('lf_device_error.txt',date('Y-m-d H:i:s'). PHP_EOL . $message .PHP_EOL,8); } curl_close($curl); $result = json_decode($response,true); if(empty($result['token'])) { file_put_contents('lf_device_error.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL,8); return [false,'']; }else{ $token = $result['token']; $expire_time = 1728000; //20天 Redis::set($token_key,$token); Redis::expire($token_key, $expire_time); return [true,$token]; } } return [true,$token]; } }