Apple HomeKit 소개

Apple HomeKit 소개

HomeKit은 홈 오토메이션 장치(Apple은 이 장치를 액세사리로 규정)를 구성하고 이를 제어할 수 있는 Apple의 Smart Home 프레임워크이다. iOS8에서 HomeKit을 도입하였고, iOS9에서 Apple답게 설정을 더 있으며, 지원되는 홈 오토메이션 유형들도 확장되었다. 또한 홈 오토메이션 장치간 상호 연동도 가능하다.

이 문서는 다음 자료를 참고하여 정리한 것이다.

1. HomeKit 정보

Apple은 HomeKit을 도입함으로써 다양한 공급 업체의 여러 가정용 자동화 장치(액세서리)들을 iCloud 계정으로 통합된 Apple의 다양한 제품들(iPhone, iPad, appleTV, appleWatach 등)을 사용하여 일관성있게 사용할 수 있다. 따라서 HomeKit을 사용하면 공급 업체가 제공하는 API 또는 앱과는 별도로 음성 인식 또는 표준화된 UI 등을 통해 일관성을 유지할 수 있다.

우선 HomeKit을 사용하면 다음 사항들을 수행할 수 있다.
  • 액세서리를 탐색하고, iOS 단말에 등록할 수 있다.
  • HomeKit의 액세서리 DB를 통해 모든 장치를 설정하고, 구성할 수 있으며 다양한 형태로 표시 및 제어할 수 있다.
  • 다양한 액세서리를 묶어 공동 작업을 하도록 명령할 수 있다.
예를 들면 '거실' 이라는 공간을 만들고, 다양한 액세서리를 이 거실 공간에 연결시킨 후 "Siri, 거실의 조명을 켜!"와 같이 음성 명령으로 액세서리를 제어할 수 있다.

2. 홈 구성 데이터베이스(Home Configuration Database) - 개념

HomeKit은 주어진 위치의 모든 자동화 장치를 홈 컬렉션(Home Collection)으로 구성한다. 이 홈 컬렉션은 사용자가 가정 내 자동화 장치들을 의미있고, 사람이 읽을 수 있는 레이블로 그룹화하는 방법을 제공하는 것이다. 이 홈 컬렉션은 iCloud 계정을 통해 연결된 모든 장치들에게 공유될 수 있다. 각 콜렉션의 개념은 다음과 같이 구분된다.
  • Home: 모든 홈 오토메이션 장치에 대한 모든 정보와 구성을 보유하는 최상위 컨테이너이다. 사용자는 주거지 및 휴가 주택과 같은 하나 이상의 거주지를 가질 수 있다.
  • Room: Home 컨테이너 안에 포함될 수 있는 거실, 침실, 주방, 욕실, 차고 등 집안의 특정 방을 정의한다. 사용자는 집 안의 특정 위치에 있는 모든 홈 오토메이션 장치들을 Room 으로 그룹화 시켜 자동시킬 수 있다.
  • Accessory: HomeKit에서 사용하는 자동화 장치를 의미한다.
  • Service: Accessory에서 제공하는 서비스를 의미하는 것으로 전등의 켜기/끄기, 빛의 색상과 조명 세기 정도, 도어락의 열기/닫기 등이 그 예가 된다. 
  • Zone: Room을 그룹화 하는 것으로 위층, 아래층 또는 지하실과 같은 논리적 영역을 의미한다.

3. 홈 구성 데이터베이스 - Accessory

(이 장에서는 HomeKit의 개념들을 일관성 있게 설명하기 위해 홈 구성 데이터베이스에서 사용된 실제 영어 단어를 사용해서 설명한다.)

HomeKit의 홈 오토메이션 장치들은 그 기능에 따라 구분되는 데 이것을 Accessory 카테고리라 한다. Accessory 카테고리는 다음과 같다.

3.1. Accessory Category Type

  • Bridge
  • Door
  • DoorLock
  • Fan
  • GarageDoorOpener
  • IPCamera
  • Lightbulb
  • Outlet
  • ProgrammableSwitch
  • RangeExtender
  • SecuritySystem
  • Sensor
  • Switch
  • Thermostat
  • VideoDoorbell
  • Window
  • WindowCovering

그리고 사용자가 홈 오토메이션 장치를 사용할 때는 일반적으로 그 장치에서 제공하는 Service를 통해 이뤄진다. Accessory의 Services 속성은 홈 오토메이션 장치가 제공할 수 있는 Service들의 집합으로 이뤄진다. Service 타입은 다음과 같다.

3.2. Accessory Service Type

  • AccessoryInformation - 주어진 홈 오토메이션 장치 (액세서리)에 대한 정보를 제공
  • AirQualitySensor - 공기 품질 센서를 정의
  • Battery (배터리) - 액세서리의 배터리 상태를 정의
  • CarbonDioxideSensor - 이산화탄소 센서를 정의
  • CarbonMonoxideSensor - 일산화탄소 센서를 정의
  • ContactSensor - 접촉 센서 (예 : 열리는 창 또는 닫힌 창)를 정의
  • Door - 문 상태 센서 (예 : 열림 또는 닫힘)를 정의
  •  - 원격제어 팬을 정의
  • GarageDoorOpener - 차고 도어 개폐기를 정의
  • HumiditySensor - 습도센서를 정의
  • LeakSensor - 누수센서를 정의(예 : 온수기 또는 세탁기의 경우).
  • LightBulb - 다른 부속 장치의 일부인 독립형 조명이나 빛을 정의(예 : 차고문 개폐 장치).
  • LightSensor - 광센서를 정의
  • LockManagement - 자동화된 도어록을 관리하는 서비스를 정의
  • LockMechanism - 원격제어 잠금 장치를 정의(예 : 도어 잠금 장치).
  • MotionSensor - 모션센서를 정의
  • OccupancySensor - 점유센서를 정의
  • Outlet - 원격제어 벽 콘센트를 정의
  • SecuritySystem - 가정 보안 시스템을 정의
  • StatefulProgrammableSwitch - 플립형 스위치와 같이 한번 트리거 된 상태로 유지되는 프로그래밍 가능한 스위치를 정의
  • StatelessProgrammableSwitch - 푸시버튼과 같이 트리거 된 후 초기 상태로 돌아가는 프로그래밍 가능한 스위치를 정의
  • SmokeSensor - 연기 감지기를 정의
  • Switch - 표준 벽 스위치처럼 켜기 / 끄기 스위치를 정의
  • TemperatureSensor - 온도 센서를 정의
  • Thermostat - HVAC 시스템을 제어하는​데 사용되는 Smart Thermostat을 정의
  • Window - 원격으로 열거나 닫을 수 있는 자동화된 창을 정의
  • WindowCovering - 블라인드처럼 열거나 닫을 수있는 것처럼 원격으로 제어되는 창을 정의

그리고 각 Service에는 한 개 이상의 Characteristic을 정의할 수 있는데, 이 Characteristic는 Service의 상태 정보를 제공하거나 Characteristic Metadata를 통해 다양한 장치들과 연동할 수 있다. 

여기서 개인적으로 Characteristic Metadata가 매우 중요한 개념이라고 생각된다. 이것은 AI를 적용하기 위한 설계로 음성 인식을 넘어 인지된 서비스를 제공할 수 있는 기본 개념이 된다.

3.3. Characteristic Metadata values

  • AdminOnlyAccess
  • AirParticulateDensity
  • AirParticulateSize
  • AirQuality
  • AudioFeedback
  • BatteryLevel
  • Brightness
  • CarbonDioxideDetected
  • CarbonDioxideLevel
  • CarbonDioxidePeakLevel
  • CarbonMonoxideDetected
  • CarbonMonoxideLevel
  • CarbonMonoxidePeakLevel
  • ChargingState
  • ContactState
  • CoolingThreshold
  • CurrentDoorState
  • CurrentHeatingCooling
  • CurrentHorizontalTilt
  • CurrentLightLevel
  • CurrentLockMechanismState
  • CurrentPosition
  • CurrentRelativeHumidity
  • CurrentSecuritySystemState
  • CurrentTemperature
  • CurrentVerticalTilt
  • FirmwareVersion
  • HardwareVersion
  • HeatingCoolingStatus
  • HeatingThreshold
  • HoldPosition
  • Hue
  • Identify
  • InputEvent
  • LeakDetected
  • LockManagementAutoSecureTimeout
  • LockManagementControlPoint
  • LockMechanismLastKnownAction
  • Logs
  • Manufacturer
  • Model
  • MotionDetected
  • Name
  • ObstructionDetected
  • OccupancyDetected
  • OutletInUse
  • OutputState
  • PositionState
  • PowerState
  • RotationDirection
  • RotationSpeed
  • Saturation
  • SerialNumber
  • SmokeDetected
  • SoftwareVersion
  • StatusActive
  • StatusFault
  • StatusJammed
  • StatusLowBattery
  • StatusTampered
  • TargetDoorState
  • TargetHeatingCooling
  • TargetHorizontalTilt
  • TargetLockMechanismState
  • TargetPosition
  • TargetRelativeHumidity
  • TargetSecuritySystemState
  • TargetTemperature
  • TargetVerticalTilt
  • TemperatureUnits
  • Version

4. HAP(HomeKit Accessory Protocol) Example

4.1. Accessory 정의 형식

[Light Bulb]

accessory : {
  service1 : "public.hap.accessory-information" {
    characteristic : "serial-number",
    characteristic : "identify"
  },
  service2 : "public.hap.lightbulb" {
    characteristic : "on",
    characteristic : "brightness"
  }
}

4.2. Accessory 설정 예제 코드


4.3. Bridge Accessory Example: config.json

{
    "bridge": {
        "name": "Homebridge",
        "username": "CC:22:3D:E3:CE:30",
        "port": 51826,
        "pin": "031-45-154"
    },

    "description": "Config file with just lockitron",

    "accessories": [
        {
            "accessory": "Lockitron",
            "name": "homebridge-lockitron"
        }
    ]
}

댓글

이 블로그의 인기 게시물

macOS가 갑자기 부팅이 되지 않을 경우 데이터 복구 또는 백업 방법

C++로 프로그래밍할 때 인자 또는 리턴 값으로 std::vector 등 STL 데이터 타입 처리하는 좋은 방법

Git 저장소를 병합하는 방법(How to merge repositories in Git)