These docs are for v1.0. Click to read the latest docs for v2.0.

1. Create report

Asleep.createReports()

var config: Asleep.Config?
var reports: Asleep.Reports?

if let config {
    reports = Asleep.createReports(config: config)
}
Property NameTypeDescription
configAsleep.ConfigAsleep.Config 객체를 입력

2. Get a single report

Asleep.Reports.report()

var reports: Asleep.Reports?
let sessionId: String

// Closure
reports?.report(sessionId: sessionId, completionBlock: { (report: Asleep.Report?, error: Asleep.AsleepError?) in
    if let error {
        print(error)
        return
    }
    
    if let report {
    }
})

// Async
Task {
    do {
        let report = try await reports?.report(sessionId: sessionId)
    } catch {
        print(error)
    }
}
Property NameTypeDescription
sessionIdStringSleep Tracking을 정지할 때 받을 수 있는 sessionId의 값
completionBlockAsleep.Model.Report?nil이면 에러 발생
Asleep.AsleepError?Error Codes

3. Get multiple reports

Asleep.Reports.reports()

var reports: Asleep.Reports?
let fromDate: String = "2023-05-01"
let toDate: String = "2023-05-07"

// Closure
reports?.reports(fromDate: fromDate, toDate: toDate, completionBlock: { (reportSessions: [Asleep.Model.SleepSession]?, error: Asleep.AsleepError?) in
    if let error {
        print(error)
        return
    }
    
    if let reportSessions {
    }
})

// Async
Task {
    do {
        let reportSessions = try await reports?.reports(fromDate: fromDate, toDate: toDate)
    } catch {
        print(error)
    }
}
Property NameTypeDescription
fromDateString (YYYY-MM-DD)조회 시작 날짜
toDateString (YYYY-MM-DD)조회 마지막 날짜
orderBy
- default value: .descending
Asleep.Model.OrderBy [.ascending, .descending]DESC: 내림차순 정렬
ASC: 오름차순 정렬
offset
- default value: 0
Int스킵할 Report 개수
limit
- default value: 20
Int최대 받을 Report 개수(0~20)
completionBlockArray<Asleep.Model.SleepSession>?nil이면 에러 발생
Asleep.AsleepError?Error Codes

4. Delete report

❗️

세션 데이터 삭제 요청에 따라 에이슬립 서버에서 세션 데이터가 삭제된 경우, 추후 과금 사용량 분석 시 삭제된 세션에 대한 구체적인 근거 제공이 어렵습니다.

Asleep.Reports.deleteReport()

var reports: Asleep.Reports?
let sessionId: String

// Closure
reports?.deleteReport(sessionId: sessionId, completionBlock: { (error: Asleep.AsleepError?) in
    if let error {
        print(error)
        return
    }
})

// Async
Task {
    do {
        try await deleteReport?.deleteReport(sessionId: sessionId)
    } catch {
        print(error)
    }
}
Property NameTypeDescription
sessionIdString삭제할 sessionId의 값
completionBlockAsleep.AsleepError?Error Codes

5. Data Type

Asleep.Model.Report

struct Report {
    let timezone: String
    let validity: Validity
    let session: Session
    let stat: Stat?
}

enum Validity {
    case inProgress
    case invalidSleepStage
    case invalidOsaStage
    case VALID
}
Property nameTypeDescription
timezoneString분석 결과의 시간대를 해당 timezone으로 변경해서 반환
예. UTC, Asia/Seoul
validityAsleep.Model.Validity해당 수면 세션의 분석이 유효한지 여부
업로드된 오디오 파일들 일부가 유효하지 않거나, 유실된 비율이 일정 이상일 경우 분석이 부정확하여 이를 표시해주는 필드

IN_PROGRESS: 세션이 OPEN인 경우
INVALID:TOO_MANDY_DEFECTS_IN_SLEEP_STAGES: 수면 단계 분석 결과가 충분하지 않음
INVALID:TOO_MANY_DEFECTS_IN_OSA_STAGES: 수면 무호흡 분석 결과가 충분하지 않음
VALID: 분석이 유효
sessionAsleep.Model.Session세션 분석 정보
statAsleep.Model.Stat분석 통계 정보

Asleep.Model.Session

struct Session {
    let id: String
    let state: State
    let startTime: Date
    let endTime: Date?
    let sleepStages: [SleepStage]
    let osaStages: [OSAStage]
}

enum State {
    case open
    case closed
    case complete
}

enum SleepStage {
    case error
    case wake
    case light
    case deep
    case rem
} 

enum OSAStage {
    case stable
    case unstable
} 
Property nameTypeDescription
idString세션 Id
stateAsleep.Model.State수면 세션 상태 (OPEN, CLOSED, or COMPLETE)
startTimeDate세션 시작 시각
endTimeDate?세션 종료 시각
sleepStagesArray<Asleep.Model.SleepStage>수면 단계
osaStagesArray<Asleep.Model.OSAStage>수면 무호흡 단계

Asleep.Model.Stat

struct Stat {
    let sleepEfficiency: Float
    let sleepLatency: Int?
    let sleepTime: Date?
    let wakeupLatency: Int?
    let wakeTime: Date?
    let timeInWake: Int
    let timeInSleepPeriod: Int
    let timeInSleep: Int
    let timeInBed: Int
    let timeInRem: Int
    let timeInLight: Int
    let timeInDeep: Int
    let timeInStableBreath: Int
    let timeInUnstableBreath: Int
    let wakeRatio: Float?
    let sleepRatio: Float?
    let remRatio: Float?
    let lightRatio: Float?
    let deepRatio: Float?
    let stableBreathRatio: Float?
    let unstableBreathRatio: Float?
    let breathingPattern: BreathingPattern?
    let estimatedAhi: Float?
}

enum BreathingPattern {
    case veryStable
    case stable
    case unstable
}
Property nameTypeDescription
sleepEfficiencyFloat수면 측정 시간 중 실제로 잠든 시간의 비율
sleepLatencyInt?잠들때까지 걸린 시간
sleepTimeDate?수면 측정 시작 후 잠들기까지 걸린 시간
wakeupLatencyInt?잠에서 깨어난 후 수면 측정을 종료하기까지 걸린 시간
wakeTimeDate?잠에서 깨어난 시각
timeInWakeInt수면 도중에 깬 시간
timeInSleepPeriodInt수면 측정 시간 중 수면 측정 시작으로부터 잠들기 까지 걸린 시간과 잠에서 깨어난 후로부터 수면 측정을 종료하기까지 걸린 시간을 제외한 시간
timeInSleepInt수면 측정 시간 중 실제로 수면 중이었던 시간
이 시간이 deep, light, rem의 3단계로 구분됨
timeInBedInt수면 측정 시작 시각부터 수면 측정 종료 시각 까지의 시간
timeInRemInt수면 단계가 rem 으로 진행된 총 시간
timeInLightInt수면 단계가 light 로 진행된 총 시간
timeInDeepInt수면 단계가 deep로 진행된 총 시간
timeInStableBreathInt호흡 안정 구간이었던 총 시간
timeInUnstableBreathInt호흡 불안정 구간이었던 총 시간
wakeRatioFloat?수면 단계 도중 중간에 깬 시간의 비율
sleepRatioFloat?수면 단계 도중 깨지 않고 잔 시간의 비율
remRatioFloat?수면 단계 도중 REM 수면의 비율
lightRatioFloat?수면 단계 도중 light 수면의 비율
deepRatioFloat?수면 단계 도중 deep 수면의 비율
stableBreathRatioFloat?수면 단계 도중 호흡 안정 구간이었던 시간의 비율
unstableBreathRatioFloat?수면 단계 도중 호흡 불안정 구간이었던 시간의 비율
breathingPatternAsleep.Model.BreathingPattern?호흡 불안정의 단계
VERY_STABLE: 매우 안정
STABLE: 안정
UNSTABLE: 불안정
estimatedAhiFloat?호흡 불안정 레벨을 판단하기 위한 값

Asleep.Model.SleepSession

struct SleepSession {
    let sessionId: String
    let state: State
    let sessionStartTime: Date
    let sessionEndTime: Date?
    let lastReceivedSeqNum: Int
    let timeInBed: Int
}

enum State {
    case open
    case closed
    case complete
}
Property nameTypeDescription
sessionIdString수면 세션 ID
stateAsleep.Model.State세션의 상태
OPEN: 진행 중인 세션으로, 오디오 업로드가 가능한 상태
CLOSED: 세션 종료 요청이 보내져 종료된 세션. 오디오 파일 업로드 불가능. 업로드된 수면 오디오에 대한 분석이 계속 진행중인 상태
COMPLETE: 세션 종료 후 모든 수면 분석이 완료된 상태
sessionStartTimeDate세션 시작 시각
sessionEndTimeDate?세션 종료 시각
lastReceivedSeqNumInt마지막으로 업로드한 오디오 파일의 순서 번호
timeInBedInt수면 측정 시작 시각부터 수면 측정 종료 시각까지의 시간