HomeKit Accessory Simulatorの利用
HomeKitを利用したアプリを開発するには、まずXcodeプロジェクトのCapabilitiesでHomeKitの項目をONにする必要があります[1]。
このとき「Download HomeKit Simulator...」というボタンが表示されますので、ここからHomekit Accessory Simulatorを取得可能です(図. Additional Tools for Xcodeのダウンロード)。
図. Additional Tools for Xcodeのダウンロード
正確には、この導線からAdditional Tools for Xcodeをダウンロードすると、その中のツールの1つにHomeKit Accessory Simulatorがあります(図. HomeKit Accessory Simulatorの場所)。
図. HomeKit Accessory Simulatorの場所
HomeKit Accessory Simulatorを利用すると、任意のアクセサリ(HMAccessory
)、サービス(HMService
)、キャラクタ(HMCharacteristic
)を追加可能で、まだ日本では手に入らないアクセサリの挙動もシミュレート可能です(図. HomeKit Accessory Simulator)。
ここで作成したアクセサリは、シミュレータ上だけでなく実機のホーム(HMHome
)に追加することができ、Apple純正のホームアプリでも、自作のHomeKit対応アプリでも利用することが可能です。たとえば、彩度(Saturation
)などの数値もこのツールのGUIで変更でき、実際のHomeKit対応デバイスを利用するよりもデバッグやテストの効率が上がるケースがあります。
図. HomeKit Accessory Simulator
HomeKit対応製品利用実例
HomeKit Accessory Simulatorの利用ではシミュレータの有用性について紹介しましたが、やはり実際にHomeKitに対応したデバイスを利用しての開発は魅力的です。
この節では、日本で購入できるHomeKit対応製品のうち7つを実際に購入し、取得できた情報をまとめます。
Philips Hue
図. Philips Hue
表. 主なサービス
HMServiceType 〜 |
説明 |
---|---|
Lightbulb |
電球 |
表. 主なキャラクタ
HMCharacteristicType 〜 |
説明 | フォーマット | 書き込み |
---|---|---|---|
PowerState |
電源の状態 | bool | 可 |
Hue |
色相 | float | 可 |
Saturation |
彩度 | float | 可 |
Brightness |
明るさ | int | 可 |
スマートIoT照明のパイオニアです。
PowerState
キャラクタで点灯/消灯を、Hue
、Saturation
、Brightness
キャラクタで電球の色相、彩度、明るさをそれぞれ変更できます(ソースコード. Hueの電球の色を変える)。
// Hue、 Saturation、Brightnessに対応したキャラクタを取得
let hue = //< HMCharacteristicTypeHue
let saturation = //< HMCharacteristicTypeSaturation
let brightness = //< HMCharacteristicTypeBrightness
// 電球をピンク色に更新
hue.writeValue(355) { error in
}
saturation.writeValue(38) { error in
}
brightness.writeValue(91) { error in
}
キャラクタのvalue
の更新が視覚的にわかりやすく、また、true
/false
だけでなく数値のvalue
を書き込み可能な製品はまだ珍しいです。
そのため、HomeKitプログラミングにトライするうえで最初に購入するものとして、おすすめしやすい製品の1つです。
また、今回紹介する製品の中では唯一、ブリッジの役割を担うアクセサリを含み、ブリッジにライトが連なるというアクセサリの多段構成も確認できます。
Elgato Eve Wireless Room Sensor
図. Elgato Eve Wireless Room Sensor
表. 主なサービス
HMServiceType 〜 |
説明 |
---|---|
TemperatureSensor |
温度センサー |
HumiditySensor |
湿度センサー |
AirQualitySensor |
清浄度センサー |
Battery |
バッテリー |
表. 主なキャラクタ
HMCharacteristicType 〜 |
説明 | フォーマット | 書き込み |
---|---|---|---|
CurrentTemperature |
現在の温度 | float | - |
CurrentRelativeHumidity |
現在の相対湿度 | float | - |
AirQuality |
空気質 | uint8 | - |
BatteryLevel |
電池残量 | uint8 | - |
ChargingState |
充電の状態 | uint8 | - |
StatusLowBattery |
状況(電池残量低下) | uint8 | - |
部屋に設置するだけで部屋の現在の温度(CurrentTemperature
)、相対湿度(CurrentRelativeHumidity
)、空気質(AirQuality
)が参照できます。
空気質(AirQuality
)キャラクタが確認できる製品は、今回紹介する製品の中ではこれだけです[2]。
部屋の温度をトリガとしてエアコンを操作するなどの利用方法が考えられます。
空気質(AirQuality
)キャラクタのvalue
のフォーマットはuint8
ですが、この数値の意味はHMCharacteristicValueAirQuality
というenum
として定義されています(表. HMCharacteristicValueAirQuality値一覧)。
表. HMCharacteristicValueAirQuality値一覧
値 | rawValue |
説明 |
---|---|---|
unknown |
0 | 未定義 |
excellent |
1 | とても良い |
good |
2 | 良い |
fair |
3 | 普通 |
inferior |
4 | 良くない |
poor |
5 | とても良くない |
動作には単3電池3本が必要で、電池の残量などもBatteryLevel
、ChargingState
、StatusLowBattery
キャラクタで把握可能です。
Elgato Eve Weather Wireless Outdoor Sensor
図. Elgato Eve Weather Wireless Outdoor Sensor
表. 主なサービス
HMServiceType 〜 |
説明 |
---|---|
TemperatureSensor |
温度センサー |
HumiditySensor |
湿度センサー |
Battery |
バッテリー |
表. 主なキャラクタ
HMCharacteristicType 〜 |
説明 | フォーマット | 書き込み |
---|---|---|---|
CurrentTemperature |
現在の温度 | float | - |
CurrentRelativeHumidity |
現在の相対湿度 | float | - |
BatteryLevel |
電池残量 | uint8 | - |
ChargingState |
充電の状態 | uint8 | - |
StatusLowBattery |
状況(電池残量低下) | uint8 | - |
Elgato Eve Wireless Room Sensorの屋外用です。こちらで取得できるのは現在の温度(CurrentTemperature
)、相対湿度(CurrentRelativeHumidity
)です。
この製品自体は気圧の計測もサポートしていますが、iOS 11時点のHomeKitは気圧のキャラクタをサポートしていません。
ただ、HomeKitは未定義のサービス(HMService
)やキャラクタ(HMCharacteristic
)を許容していますので、気圧の情報も未定義のサービス、キャラクタから無理やり参照することはできます(ソースコード. 気圧を取得)。
// Eve Weatherの気圧を示すserviceType
let serviceType = "E863F00A-079E-48FF-8F27-9C2605A29F52"
// Eve Weatherの気圧を示すcharacteristicType
let characteristicType = "E863F10F-079E-48FF-8F27-9C2605A29F52"
// 上記serviceType/characteristicTypeと合致するキャラクタを取得
let service = home.servicesWithTypes([serviceType])?.first
let candidates = service?.characteristics
.filter { $0.characteristicType == characteristicType }
guard let airPressure = candidates?.first else {
return
}
airPressure.readValue { error in
guard let value = airPressure.value as? Float else {
return
}
// 取得した気圧をprint
print("airPressure: \(value)")
}
動作には単3電池2本が必要で、電池残量関連のキャラクタも参照可能です。
図. Eve Weatherを外壁に設置
屋外用ということで外壁等に設置することになります(図. Eve Weatherを外壁に設置)。両面テープなど付属していませんので別途購入が必要です。
防水等級はIPX3(防雨形)です。完全防水ではなく生活防水レベルとのことですので、強い雨の日にも故障しないかはわかりません(設置してから3ヶ月の範囲では雨の日でも問題なく利用できています)。
Elgato Eve Door & Window Wireless Contact Sensor
図. Elgato Eve Door & Window Wireless Contact Sensor
表. 主なサービス
HMServiceType 〜 |
説明 |
---|---|
ContactSensor |
接触センサー |
Battery |
バッテリー |
表. 主なキャラクタ
HMCharacteristicType 〜 |
説明 | フォーマット | 書き込み |
---|---|---|---|
ContactState |
接触センサーの状態 | uint8 | - |
BatteryLevel |
電池残量 | uint8 | - |
ChargingState |
充電の状態 | uint8 | - |
StatusLowBattery |
状況(電池残量低下) | uint8 | - |
ドアや窓の開閉状態を感知することができる接触センサーです。
この製品は2つの部品に分かれており、この2つが近接しているかどうかを判定できます。
接触センサーの状態(ContactState
)キャラクタのvalue
のフォーマットはuint8
ですが、この数値の意味はHMCharacteristicValueContactState
というenum
として定義されています(表. HMCharacteristicValueContactState値一覧)。
表. HMCharacteristicValueContactState値一覧
値 | rawValue |
説明 |
---|---|---|
detected |
0 | 接触 |
none |
1 | 非接触 |
動作には単3電池1本が必要で、電池残量関連のキャラクタも参照可能です。
図. Eve Door & Windowを開き戸に設置
設置用の両面テープも付属しています。図. Eve Door & Windowを開き戸に設置は自宅の玄関の開き戸にこの製品を設置した例ですが、設置場所さえ確保できれば引き戸にも設置できます。
Elgato Eve Motion Wireless Motion Sensor
図. Elgato Eve Motion Wireless Motion Sensor
表. 主なサービス
HMServiceType 〜 |
説明 |
---|---|
MotionSensor |
モーションセンサー |
Battery |
バッテリー |
表. 主なキャラクタ
HMCharacteristicType 〜 |
説明 | フォーマット | 書き込み |
---|---|---|---|
MotionDetected |
動きを検知 | bool | - |
BatteryLevel |
電池残量 | uint8 | - |
ChargingState |
充電の状態 | uint8 | - |
StatusLowBattery |
状況(電池残量低下) | uint8 | - |
モーションセンサーです。
動きを検知(MotionDetected
)している状態かどうかをtrue
/false
で取得できます。
Apple純正のホームアプリには「センサーが何かを検知したとき」をトリガとしたオートメーションを作成する機能がありますが、このMotionDetected
キャラクタはその用途に使えます(図. ホームアプリの新規オートメーション画面)。
図. ホームアプリの新規オートメーション画面
動作には単3電池2本が必要で、電池残量関連のキャラクタも参照可能です。
なお、センサーの感度なども変更することができ、変更したい場合はApp Storeから「Elgato Eve」をダウンロードして設定します(図. Elgato Eveの設定画面)。
図. Elgato Eveの設定画面
※2020/10/6追記: 2020年現在ではPhilips Hueモーションセンサーがありますので、既にHueを導入済みのかたにはこちらをお勧めします
D-Link Omna 180 Cam HDカメラ
図. D-Link Omna 180 Cam HDカメラ
表. 対応するカメラコントロール
プロパティ名 | 型 | 説明 |
---|---|---|
streamControl |
HMCameraStreamControl |
ビデオストリーム(動画) |
snapshotControl |
HMCameraSnapshotControl |
スナップショット(静止画) |
microphoneControl |
HMCameraAudioControl |
マイク |
speakerControl |
HMCameraAudioControl |
スピーカー |
settingsControl |
HMCameraSettingsControl |
カメラ設定 |
表. 主なサービス
HMServiceType 〜 |
説明 |
---|---|
CameraControl |
カメラコントロール |
Microphone |
マイク |
Speaker |
スピーカー |
MotionSensor |
モーションセンサー |
表. 主なキャラクタ
HMCharacteristicType 〜 |
説明 | フォーマット | 書き込み |
---|---|---|---|
ImageMirroring |
画像反転 | bool | 可 |
Mute |
消音 | bool | 可 |
Volume |
音量 | int | 可 |
MotionDetected |
動きを検知 | bool | - |
2017年10月時点で日本で購入可能な唯一のHomeKit対応IPカメラです。
ビデオストリーム(動画)の利用、スナップショット(静止画)の撮影、マイクやスピーカーの利用と、HomeKitがサポートするカメラコントロールとしては一通りのことができます。
また、カメラを利用したモーション検知(MotionDetected
)も可能です。
App Storeから「OMNA」アプリをダウンロードして利用することで、HomeKitがサポートしていない部分の設定変更もできます。
カメラで撮影している動画をアプリで表示する具体的な方法、マイクやスピーカーの設定方法などについてはHomeKit入門のカメラの利用で紹介しています。
Koogeek Smart Plug P1
図. Koogeek Smart Plug P1
表. 主なサービス
HMServiceType 〜 |
説明 |
---|---|
Outlet |
コンセント |
表. 主なキャラクタ
HMCharacteristicType 〜 |
説明 | フォーマット | 書き込み |
---|---|---|---|
PowerState |
電源の状態 | bool | 可 |
OutletInUse |
コンセント使用中 | bool | - |
いわゆるスマートコンセントです。
このデバイスを経由してコンセントとファン(扇風機)などの機器を接続し、接続した機器の電源のOn/Offを更新することができます。
このデバイスのプラグは3ピンのため、日本で一般的な2ピン用のコンセントで利用する場合は、別途3ピン→2ピン変換プラグが必要です(図. プラグの形状)。
図. プラグの形状
具体的なコントロール方法ですが、このアクセサリが持つPowerState
キャラクタに対してwriteValue(true)
で電源On、writeValue(false)
で電源Offができます。
また、OutletInUse
キャラクタにより、コンセントに機器が接続されているかをtrue
/false
で参照することもできます。
なお、Koogeek Smart Plug P1は、今回紹介する製品の中ではassociatedServiceType
プロパティを更新できる唯一のデバイスです。
associatedServiceType
プロパティを更新するには、Apple純正のホームアプリ[3]でこのデバイスの詳細画面を開きます。ここで「タイプ」に表. 選択できるassociatedServiceTypeの2種[4]のどちらか、コンセントに接続した機器に合致するものを選択します。
表. 選択できるassociatedServiceType
|HMServiceType
〜 | 説明 |
|--- | ---- | ---- |
|Fan
| ファン |
|Lightbulb
| 電球 |
たとえば、ここで「ファン」を選択すると、ホームアプリ上でのこのサービスを示すアイコンもファンになり、電源をオンにすると勢いよくファンが回るようなギミックも見られます(図. associatedServiceType)。
図. associatedServiceType