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);
 }