[iOS 8] HomeKit 対応アプリを作ろう (2) 開発を始めるための基礎知識

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

まずは HomeKit に触れてみよう

第1回から少しだけ間が空いてしまいましたが、引き続き HomeKit について解説していきたいと思います。今回は HomeKit では具体的にどのようなことができるのか、また HomeKit はどのようなクラスを扱うのかといった開発を始めるための基礎知識について学んでいきたいと思います。

HomeKit でできること

さて、まずは HomeKit でどのようなことができるか見ていきましょう。こちらによると、HomeKit を利用して次のことができます。

  • アクセサリを発見し、永続的でクロスデバイス *1なホーム構成データベースに追加する
  • ホーム構成データベース内のデータの表示・編集・アクションを行う
  • 設定用のアクセサリやサービスと通信する

なるほど、HomeKit 対応ハードウェアの本体または付属品(アクセサリ) と通信し、ホーム構成データベースにデータを追加したり、アクションを行うことができるということですね。なお、アクションとは、具体的にはリビングのライトをオンにしたり、寝室のエアコンの設定温度を変更したりといったような行為のことです。「リビング」や「部屋」といったように、操作する対象の場所が入っているところがミソです(詳しくは後述します)。

なお、ホーム構成データベースは HomeKit 対応アプリだけではなく、Siri も利用可能です。Siri を通してホーム構成データベースのデータを参照し、アクションを行うことができるというわけです。

HomeKit の構成要素

ホーム

HMHome, HMHomeManager

ホームは読んで字の如く「家」を表現する、トップレベルのコンテナです。多くのユーザーが所属する家は1つなので、アプリ上では基本的に1つのホームを扱います。別荘など他の居住地がある場合は複数のホームを設定する可能性があります。

ルーム

HMRoom

「部屋」を表現する、ホームのオプションパーツです。サイズや位置情報など、物理的なプロパティは持っていません。個々のルームの名前は「リビング」や「キッチン」など、ユーザーにとって意味のあるシンプルなものを付けられることが期待されています。こうすることで「Siri、キッチンの電気消して」などといったような自然な呼び出しができます。

アクセサリ

HMAccessory, HMAccessoryBrowser

ホームまたは ルームに割り当てられる、物理的なホームオートメーションデバイスです。アクセサリはユーザーが任意のルームを割り当てない限り、HomeKit はホームのデフォルトの特別なルームに割り当てます。

サービス

HMService, HMServiceGroup

アクセサリによって提供される実際のサービスです。アクセサリはユーザーが制御可能なサービス(ライトのオン/オフなど)またはサービスの使用する上で必要なサービス(ファームウェアのアップデートなど)の2つのサービスを持っています。ユーザーの制御可能なサービスをよく取り扱うので、サービスといえば基本的に前者を指すことだと思ってよいです。

アクセサリは1つ以上のサービスを持つことができます。例えば、ガレージドアオープナーは「ドアを開けるサービス」と「ドアのライトのオン・オフを切り替えるサービス」という2つのサービスを持っていることが多いです。

特性

HMCharacteristic, HMCharacteristicMetadata

サービスの特性を示す要素です。例えば、ライトであればオン・オフといった値、温度計であれば設定温度の値といったような、各々のサービスで必要とされる特性を示します。値の読み書きができるほか、値が変更されたときの通知を受け取る設定も行うことができます。なお、値の単位や最大値、最小値といった情報は HMCharacteristicMetadata クラスで表現されています。

ゾーン

HMZone

ルームをグルーピング化するための要素です。例えば「上の階」「下の階」や「1階」「2階」などといったような分け方で使います。ゾーンはあくまでオプションなので、ルームは必ずしもゾーンに属している必要はありません。「上の階の電気を消す」とか「下の階のエアコンを止める」などといったような操作をしやすくするために提供されています。

アクション, アクションセット

HMAction, HMCharacteristicWriteAction, HMActionSet

アクションは HomeKit に関するある動作を実行するための要素です。HMAction は抽象クラスであり、実際は HMCharacteristicWriteAction クラス (サービスの特性に書き込むアクションクラス) を使って実装します。

何らかの操作を行いたい場合は、アクションセットで1つまたは複数のアクションを取り纏めて、サービスに送信します。アクションセットは直接実行するか、後述するトリガにセットして任意の条件下で実行します。

トリガ, タイマートリガ

HMTrigger, HMTimerTrigger

1つまたは複数のアクションセットを実行するために使われる要素です。HMTrigger はトリガの基本的な機能のみを提供しているクラスのため、トリガが実行されるための条件を指定するような機能は持っていません。特定の時間で実行するようなトリガは HMTimerTrigger クラスを使います。それ以外の特別なトリガを定義したい場合、HMTrigger クラスのサブクラスを定義する必要があります。

ユーザ

HMUser

ホーム内で、アクセサリーやサービスを制御するアクセス権を持つ人を表す要素です。最新バージョン(iOS 8.1) では name プロパティしか持っていないため、誰が操作したかという情報を表現するためだけに使われると思われます。

まとめ

いかがでしたでしょうか。HomeKit は何をするものなのか、どういったことができるのか、どのように実装するのか、おおまかに理解できたかと思います。

次回以降は、HomeKit についてのより詳細な内容と実装方法を解説していきたいと思います。お楽しみに!

参考

脚注

  1. あるコンテンツが異なるデバイス間で共通で流通できること。詳しくはこちら