わふうの人が書いてます。

iOSアプリケーション開発、BLEのファームウェアとハードウェア試作のフリーランスエンジニア。

HomeKitの概要

2014年6月11日に大垣で開催されるWWDC2014ディベロッパ共有会 の下書きとして、
一般に公開されている部分を抜粋してブログに書いてみます。

iOS8で導入されたHomeKit

iOS8はiOS7までになかった多くのAPIとフレームワークが追加されました。そのうちHomeKitおよびHealthKitは、
今までのアプリケーションで完結するフレームワークと異なり外部機器との連携前提で初めて価値をもつ毛色の違うフレームワーク(あるいはサービス)です。
開発者の視点からHomeKitの概要をまとめます。

HomeKitの資料

HomeKitの専用のページが公開されています https://developer.apple.com/homekit/
このページにはHomeKitが何かを詳細に解説しています。その内容はWWDCのプレゼンテーション内容と同じです。
HomeKitに対応するハードウェアを開発したい人向けに問い合わせページがあります。

iOSアプリケーション開発者向けのフレームワークとクラスのリファレンス・ドキュメントはまだありません。
Xcode6betaにあるHomeKit.frameworkのヘッダファイル(とそのコメント)を読むしかないです。
サンプルプロジェクトは公開されたものはないようです。

WWDC2014のHomeKitに関するセッション

WWDC2014 https://developer.apple.com/videos/wwdc/2014/ でHomeKitに関わるセッションは次の2つです:

  • Introducing HomeKit, Session 213
  • Designing Accessories for iOS and OS X, Session701

最初のIntroducing HomeKitは、iOSアプリケーション開発者向けのHomeKitフレームワークの解説です。HomeKitのコンセプトと特徴そしてアプリケーションのAPIを解説しています。次のDesigning Accessories for iOS and OS Xの中では、HomeKitに対応するハードウェアの概要が解説されています。

HomeKitを構築する周辺機器とiOSアプリケーションは、HomeKitフレームワークを通してやりとりするので、お互いの詳細仕様まで知らなくても操作ができます。ハードウェアとソフトウェアという分野の異なる、したがって担当者も異なるもののセッションは別にしたのでしょうか。

HomeKitの概要

本家 https://developer.apple.com/homekit/ の概要を読むほうがよいと思いますが、2次資料として私が理解した内容で再構成してみます。

HomeKitは、Appleの Home Automation Protocol (HAP) と iOSデバイスをシームレスに統合します。ホームオートメーションに新たな強みをもたらすでしょう。

iOSアプリケーションに公開されたAPIは:

  • HAPに対応した機器をiOSに登録する、登録を削除する。
  • iOSに登録されているHAP対応機器をiOSアプリから操作する。
  • 機器からの変更通知を受け取る。

です。

iOSデバイスには1つの共通の機器登録データベースがあります。iOSアプリケーションはHomeKitを通じて、そのデータベースの変更や参照ができます。

Siriを通じて、音声コマンドでHAP対応機器を操作できます。Appleがすでに定義している機器の種類および動作、例えば電球と点灯のオンオフ、はデフォルトでSiriが理解できます。iOSアプリケーションがコモン・データベースに、電球とその点灯機能を登録していれば、(実際の音声コマンドがこのようなものかは、まだわかりませんが)”電気をつけて”といえば、Siriを通じてiOSデバイスが電球を点灯させます。

HomeKitフレームワークの構成

HMHomeManager

コモン・データベースのエントリポイントです。HMHome の生成/登録/検索/削除を提供します。
家は複数設定できます。そのうち1つはPrimary homeとします。例えば、母屋と離れ、あるいは別荘があるならば、母屋をPrimary homeに設定する使い方でしょうか。

HMHome, HMRoom, HMZone

HMHomeは家を表します。HMRoomは部屋を表します。HMZoneは部屋の集合を表します。HMZoneは、例えば1階の部屋の集合を登録して”1階”という名前をつける、使い方をします。

この3つのオブジェクトには、割り当て時にはユニークな名前をつけます。Siriはその割り当て名前を参照します。”自宅の1階の電気を消して”と指示を受ければ、自宅と命名されたHMHomeの1階と名付けられたHMZoneを参照して、そこに登録されたHMRoomの照明それぞれをオフします。

HMAccessory, HMService, HMCharacteristics

HMAccessoryは物理的なデバイスに対応します。例えば、電球、ドアロック、エアコンなど1つ1つの装置を表します。HMAccessoryは必ず部屋に属します(そう設定します)。HMHomeに属することもできますが、その場合はHMHomeがもつ内部実装の特別な部屋に属します。HMAccessoryは、名前をつける事で唯一に識別できるようにします。HMAccessoryをとおして、現在の状態、動作指示値の取得ができます。

例えばエアコンであれば、現在の室温や湿度といった外部センサ値の取得、エアコンがオンかオフかや冷房/暖房動作のような内部動作状態、そして設定温度などの指示設定値の設定と取得があります。この機器はいろいろなものから操作されます。複数のiOSアプリケーションがコモン・データベースを使いますし、人間が直接機器を操作することもあります。そのような機器の変化は、デリゲートを通じてiOSアプリケーションに通知されます。

HMAccessoryはHMServiceの集合を持ちます。HMServiceは1つの機器の機能を表します。これは”その機器が何であるか”を表すものではありません。分割不可能な単1の機能を表す概念です。

例えば、ドアロック装置であれば、ドアのロック/開放機能があるでしょう。もしもあるドアロックが、夜間に操作するときに周辺を照らす機能があるとすれば、それはライトのオン/オフ機能という別の機能になります。さらにドアロックが電池動作であれば、電池残量通知機能もあるでしょう。このドアロックは、ロック、ライト、電池残量検出の3つのHMServiceを持ちます。

HMSerivceはHMCharacteristicsの集合です。HMCharacteristicsは、効きが検出した外界の値、内部動作情報、動作指示情報などを読み書きするエントリポイントです。例えば照明であれば、照明のOn/Offを表すHMServiceの中に、ライトのOn/Off状態を示し(読み込み)かつOn/Offを指示(書き込み)するHMCharacteristicsがあるでしょう。

HMServiceの概念は、機器とその機能を分離する重要な概念です。例えば1Fのライトをすべてオフと言う指示を出した時、Siriは1FにあるHMAccessoryから照明のHMServiceをすべて抜き出して一斉にオフするでしょう。ですから、照明機器はもちろん、先の例で言えば照明機能のあるドアロックの照明も同時に消えます。

もしもHMSericeの概念がなければ、個別の機器それぞれ毎に振るまいを制御するパソコンでいえばデバイスドライバのような仕組みが必要になります。HMServiceという機能単位をHomeKitに渡すことで、個別機器それぞれを個別に細かく振る舞いを制御するドライバ相当のロジックが不要となり、HomeKitが統一して機器を扱えます。

HMCharacteristicWriteAction

iOSアプリケーションからHMAccessoryのHMCharacteristicsへの書き込みは、HMCharacteristicWriteAction を使います。

HMServiceGroup, HMActionSet, HMTimerTrigger

HMServiceGroupはHMServiceの集合です。例えば、照明をグループにします。

HMActionSetはアクションの集合です。例えば、夜の状態にしたいときの操作群、照明を暗くして、エアコンを少し低めにするなど、複数の操作の集合をあらわします。

HMTimerTrigger は時間を指定して実行するアクションの集合です。繰り返し動作も指定できます。これはシステムがバックグラウンドで処理します。

HAP対応ハードウェアの概要

MFiです。見れば分かる人にはすぐわかるけど、説明しだすと長いのと、ここがHomeKitの肝でもあるしで、めんどくさいので省略。