Swifter {Swift Developer}

메뉴

아무것도 없이 HomeKit 앱 개발하기

iOS10에서는 홈 앱이 기본내장되었지만 한국에서 구입할수있는 HomeKit 대응 제품이 극히 한정되어 있다. 약간의 맛배기로만 테스트해보고 싶다면 시뮬레이터를 사용하여 어떤 형태인지 알아볼 수 있다.

HomeKit의 구성요소

여기서 말하는 HomeKit은 집(Home)과 방(Room)이라는 개념이 있다.

집(Home)은 최상위 컨테이너로 많은 사용자가 속한 집은 하나이기 때문에 앱에서 기본적으로 기본적으로 하나의 집을 취급한다. 콘도나 다른 거주자가 있는 경우 여러개의 집을 설정할 수 있다. (HMHome, HMHomeManager)

방(Room)은 크기나 위치정보등의 물리적인 속성을 가지고 있지 않고 개별적인 방 이름은 거실, 부엌등 사용자에게 의미가 있고 간단하게 구성하길 기대하고 있다. 이렇게 하면 “Siri야, 전자렌지 켜줘”등 자연적인 호출이 가능해진다. (HMRoom)

액세서리(Accessory)는 집 또는 방에 할당된 물리적인 홈오토메이션 기기를 말한다. 액세서리는 사용자가 어떤 방을 할당하지 않으면 HomeKit은 홈의 기본방에 할당한다. (HMAccessory, HMAccessoryBrowser)

서비스(Service)는 액세서리를 통해 제공되는 실제 서비스를 말한다. 액세서리는 사용자가 제어할 수 있는 서비스(전등끄고 켜기) 또는 서비스 사용에 필요한 서비스(펌웨어 업데이트)라는 2가지 서비스를 가지고 있다. 사용자 제어가 가능한 서비스를 잘 취급하고 있어 서비스라고 하면 기본적으로 앞에서 설명한 것을 가리킨다고 본다.

액세서리는 하나 이상의 서비스를 가질 수 있는데 현관문을 열고 닫는다는 것과 문 비상등을 켜고 끈다라는 두가지 서비스처럼 같이 구성하는 경우가 많다. (HMService, HMServiceGroup)

특성(Characteristic)는 서비스의 특성을 나타내는 요소를 말하는데 전등을 켜고 끄는 값, 온도계를 사용한다면 설정한 온도값등 각각의 서비스에서 필요로 하는 특정을 나타낸다. 값을 읽고 쓸 수 있고 값이 변경되면 알림을 받을 수도 있다. 또한 값의 단위, 최대값, 최소값등의 정보는 HMCharacteristicMetadata클래스로 표현되어 있다. (HMCharacteristic, HMChracteristicMetaData)

영역(Zone)은 방 그룹핑을 하기 위한 요소로 윗층과 아랫층, 1층, 2층과 같은 형태로 나누는 방법에 사용된다. 영역은 어디가지나 옵션이기 때문에 방에 반드시 영역이 속할 필요는 없다. 다만, 윗층 전등끄기 , 아랫층 에어컨 끄기등과 같은 작업을 쉽게 하기위해 제공된다. (HMZone)

액션(Action)은 HomeKit과 관련된 동작을 실행하기 위한 요소로 HMAction은 추상클래스이며 실제로는 HMCharacteristicvWriteAction클래스(서비스의 특성에 사용될 액션클래스)에 사용하여 구현한다.  어떤 작업을 하려면 액션셋트(ActionSet)에 하나이상의 작업을 수렴하여 서비스로 보낸다. 액션세트는 직접 실행하거나 트러기로 설정하고 어떤 조건에서 실행된다. (HMAction, HMCharacteristicWriteAction, HMActionSet)

트리거(Trigger)는 하나이상의 작업셋트를 실행하는데 사용되는 요소로 HMTrigger는 트리거의 기본적인 기능만을 제공하는 클래스를 위한 트리거가 실행되기 위한 조건을 지정하는 기능은 가지고 있지 않다. 특정 시간에 실행되도록 트리거는 HMTimerTrigger클래스를 사용한다.별도의 트리거를 정의할 경우 HMTrigger클래스의 하위클래스를 정의해야 한다. (HMTrigger, HMTimerTrigger)

사용자(User)는 집에서 액세서리 및 서비스를 제어할 수 있는 권한을 가진 사람을 나타내는 요소이다. (HMUser)

개발환경은 Xcode8, iOS10기준으로 진행한다.

HomeKit 관련 앱 만들기

새 앱 프로젝트를 만들고 프로젝트에서 TARGETS를 선택하고 [Capabilities]탭에서 HomeKit항목을 ON으로 변경한다.

homekit1

바로 아래에 [Download HomeKit Simulator…]버튼을 선택한다.

homekit2

다운로드 페이지가 접속되면 “Additional Tools for Xcode8″을 다운로드받는다. 이를 실행하면 나오는 폴더들중 [Hardware]를 열고 [HomeKit Accessory Simulator]를 응용프로그램 디렉토리로 드래그해서 넣는다.

HomeKit Accessory Simulator

설치한 시뮬레이터를 실행하고 [File]-[New]-[Accessory]메뉴를 선택한다.

homekit3

  • Name: Sample1
  • Manufacturer: MJ
  • Model: MJ-Model1

을 적당히 입력하고 [Finish]버튼을 클릭한다.

homekit4

다음 나오는 화면에서 [Add Service…]버튼을 눌러 해당 액세서리를 추가한다. 여기서 말하는 액세서리는 HomeKit에 대응하는 기기자체를 의미하며 서비스라는 것은 해당 액세서리가 무엇을 제공하는지를 말한다. 조명등 여러가지가 정의되어 있고 하나의 액세서리가 여러가지 서비스를 제공하는 경우도 있다는 것을 기억하자. 여기에서는 “Lightbulb”을 선택하고 Name은 기본입력된 값을 사용하거나 별도 구분하는 이름을 입력한다.

homekit5

선택한 서비스에 맞춰 인터페이스가 표시된다.

homekit6

표준 홈 앱에서 테스트하기

위와 같이 홈킷 시뮬레이터를 설정해놓은 상태에서 아이폰 실제 기기에서 홈를 실행하면 가상으로 설정한 액세서리에 접근할 수 있다. 단, 같은 네트워크안에 있어야 한다.

img_3986

홈앱에서 [액세서리 추가]버튼을 탭한다.

img_3987

그러면 이전에 만든 Sample1 가상 액세서리가 보여진다. 이를 탭하면 색상을 조절할 수 있는 액세서리가 추가된다.

HomeKit 앱 직접 만들기

홈에 등록되어 있는 액세서리 얻기

HMHomeManager를 사용해서 홈에 접근한다.

슬라이더는 스토리보드에서 추가하고 0~100까지의 값을 얻도록 설정하고 valueChanged액션도 추가한다.

HMHomeManagerDelegate는 홈 정보에 변화가 있는 경우의 처리 델리게이트를 선언한다.

HomeManager 인스턴스의 primaryHome은 사용자가 주로 사용하는 홈을 포함고 있다. homeManagerDidUpdateHomes를 호출한 후 유효한 값이 들어 있지 않는다. 홈의 액세서리에 해당 홈에 직접 등록되어 있는 액세서리에 접근할 수 있다. 또한 홈에 방을 추가해서 액세서리를 등록했다면 홈에서 방그룹에서 방을 가져와 접근한다.

액세서리는 여러가지 서비스를 가지고 있다면 하나씩 꺼내서 확인한다. 원하는 서비스 여부는 HMService의 serviceType을 통해 확인하고 이를 통해 Lightbulb를 찾는다. 각 서비스는 참조가능한 설정값을 가지고 characteristics에 여러가지로 저장되어 있다. 이를 통해 원하는 밝기를 나타내는 값을 찾는다.

 

 

Facebook Comments

카테고리:   Swift 3.0

Tags:  , , , , ,

댓글

죄송하지만 댓글은 닫혀 있습니다.