public function getCalendarDetail($membertoken, $regIdx) { $member = Member::whereHas('token', function ($query) use($membertoken) { $query->where('token', $membertoken); })->first(); $data = new stdClass(); $data->sleepInfo = $this->avgSleepRepo->getAvgSleep($member, $regIdx); $data->sleepRecords = $this->sleepRecordRepo->getRecordsByRegIdx($member, $regIdx); return Utils::result($data); }
public function test2() { // 태스트셋 만듬 // $time1 = mktime(3, 0, 0, 7, 15, 2015); // 2015-07-15 // $member = Member::find(1); // for($i = 0; $i < 3000; $i++ ) { // $sleepStep = (mt_rand() % 4) + 1; // $this->sleepRecordRepo->addSleepRecord($member, 1, $sleepStep, date('Y-m-d H:i:s', $time1) ); // $time1 += 30; // } // $time2 = mktime(3, 0, 0, 7, 16, 2015); // 2015-07-16 // for($i = 0; $i < 3000; $i++ ) { // $sleepStep = (mt_rand() % 4) + 1; // $this->sleepRecordRepo->addSleepRecord($member, 2, $sleepStep, date('Y-m-d H:i:s', $time2) ); // $time2 += 30; // } // echo 'OK'.PHP_EOL; // -- getMinMaxTimeGroupByRegIdx -- //$member = Member::find(1); //$data = $this->sleepRecordRepo->getMinMaxTimeGroupByRegIdx($member); return Utils::result($data); }
/** * 특정 회원의 지정된 알람을 삭제 * @param String membertoken * @param Integer alarmseq * @return Array */ public function removeAlarm($membertoken, $alarmseq) { // 멤버 토큰을 통해 멤버 가져옴. $memberToken = Membertoken::where('token', $membertoken)->first(); $member = $memberToken->member()->first(); $memberAlarm = Alarm::find($alarmseq); // 알람 업데이트 if (isset($memberAlarm)) { if ($memberAlarm->memberSeq == $member->seq) { $affectedRow = $memberAlarm->delete(); return Utils::result($affectedRow); } } return Utils::result(Utils::CANNOT_FIND_ALARM, true); }
public function getMemberSleepRecordRecent($membertoken) { $member = Member::whereHas('token', function ($query) use($membertoken) { $query->where('token', $membertoken); })->first(); // 회원의 최근 regIdx 가져옴. $recentRegIdx = $this->avgSleepRepo->getLastRegIdx($member); // 회원 regidx 에 대한 모든 레코드 가져옴 $records = $this->sleepRecordRepo->getRecordsByRegIdx($member, $recentRegIdx); return Utils::result($records); }
Route::filter('csrf', function () { if (Session::token() !== Input::get('_token')) { throw new Illuminate\Session\TokenMismatchException(); } }); /** * @brief 토큰정보를 통해 유효한 멤버를 확인하기위한 필터 */ Route::filter('verifyToken', function ($route) { $memberToken = $route->getParameter('membertoken'); $token = Membertoken::where('token', $memberToken)->first(); Log::info('====> VerifyToken :: ' . $memberToken); if (!isset($token)) { return Utils::result(Utils::CANNOT_FIND_TOKEN, true); } $member = $token->member()->first(); if (!isset($member)) { return Utils::result(Utils::CANNOT_FIND_TOKEN, true); } // 토큰 만료일 비교 $limitTime = date('Y-m-d H:i:s', time() - 3600); if (!($token->expiretime >= $limitTime)) { // 토큰 삭제 $token->delete(); return Utils::result(Utils::EXPIRED_TOKEN, true); } Log::info('\\t\\t\\t Member :: ' . $member->getKey() . ' / ' . $member->userid); // member 토큰 시간 업데이트. $token->expiretime = date('Y-m-d H:i:s', time()); $token->save(); });
/** * @brief 라즈베리파이에서 측정된 30초 윈도우 받아서 가공 * @details 30초 윈도우 데이터를 외부 C 프로그램으로 분류하고 결과를 DB에 저장하고 MQTT 전송 * @param bluetoothaddr (String) * @param rawdata (String) * @return Util */ public function userRawDataReceiver() { $validRule = ['bluetoothaddr' => array('required', 'regex:/^[0-9a-zA-Z]{2}:[0-9a-zA-Z]{2}:[0-9a-zA-Z]{2}:[0-9a-zA-Z]{2}:[0-9a-zA-Z]{2}:[0-9a-zA-Z]{2}$/')]; $bluetoothaddr = array_map('trim', Input::only('bluetoothaddr')); $validator = Validator::make($bluetoothaddr, $validRule); $rawdata = Input::get('rawdata'); $noiseFile = Input::file('noisefile'); $noisePeak = Input::get('noisepeak'); if (!isset($noisePeak)) { $noisePeak = NULL; } if ($validator->fails()) { return Utils::result(Utils::CANNOT_PASS_VALIDATOR, true); } // 블루투스로 유저 조회 $member = Member::where('bluetoothaddr', $bluetoothaddr)->first(); if (!isset($member)) { return Utils::result(Utils::CANNOT_FIND_MEMBER); } //--------------------------- // RAW 데이터 처리 //--------------------------- $_startConvertData = microtime(true); $arrayRawData = explode(',', $rawdata); if (count($arrayRawData) == 0) { return Utils::result(Utils::CANNOT_PASS_VALIDATOR, true); } $arrayVoltageData = $this->matlabExec->convertRawData($arrayRawData); // RAW 데이터를 Voltage 데이터로 변환. // voltage 파일 저장 $saveResult = $this->matlabExec->saveRawData($arrayVoltageData); if ($saveResult === FALSE) { return Utils::result(Utils::CANNOT_PASS_VALIDATOR . " FAIL TO SAVE", true); } $_endConvertData = microtime(true); // MATLAB 필터 $_startClassify = microtime(true); // 실행시간 측정 $sleepStep = $this->matlabExec->execNeutralNetFilter(); //--------------------------------------------------------- // noise 파일 업로드 부분 //--------------------------------------------------------- $uploadFileName = NULL; if (isset($noiseFile)) { $extension = $noiseFile->getClientOriginalExtension(); $originalFileName = $noiseFile->getClientOriginalName(); $uploadFileName = sprintf("%s_%d.%s", md5(time()), time(), $extension); // 업로드 시작 $noiseFile->move(public_path() . '/upload/', $uploadFileName); } //--------------------------------------------------------- // AvgSleep & SleepRecord 업데이트 //--------------------------------------------------------- $lastRegIdx = $this->avgSleepRepo->getLastRegIdx($member); $lastRegTime = $this->avgSleepRepo->getLastRegTime($member, $lastRegIdx); // 가장 마지막 시간 가져옴 $currentTime = time(); $currentDate = date('Y-m-d H:i:s', $currentTime); if (abs($currentTime - strtotime($lastRegTime)) > 3600) { /* 현재시간과 마지막 묶음 시간차이가 1시간 이상이면 다른 묶음으로 처리 */ $lastRegIdx += 1; $this->avgSleepRepo->addAvgSleep($member, $lastRegIdx); } $this->sleepRecordRepo->addSleepRecord($member, $lastRegIdx, $sleepStep, $currentDate, $uploadFileName, $noisePeak); // 수면 단계 업데이트 if (in_array($sleepStep, [1, 2, 3, 4])) { $this->avgSleepRepo->increaseTotalRecord($member, $lastRegIdx); if (in_array($sleepStep, [3, 4])) { $this->avgSleepRepo->increaseDeepRecord($member, $lastRegIdx); } } // MQTT 전송부분 $topic = $member->userid . '/sleepStep'; $message = sprintf("%d", $sleepStep); $mqtt = new MQTT("laravel.ssm.n-pure.net", 1883, "NeuroskyMQTTPUSH"); //Change client name to something unique if ($mqtt->connect()) { $mqtt->publish($topic, $message, 0); $mqtt->close(); } $_endClassify = microtime(true); // 측정끝 $output = new stdClass(); $output->sleepStep = (int) $sleepStep; $output->elapsedConvertFile = $_endConvertData - $_startConvertData; $output->elapsedClassification = $_endClassify - $_startClassify; $output->elapsedTime = $output->elapsedConvertFile + $output->elapsedClassification; // RAW 데이터 삭제 $this->matlabExec->removeRawData(); return Utils::result($output); }