Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What is going on with this article?
@tokorom

[HomeKit対応仕様] Philips Hue Dimmer スイッチ

More than 3 years have passed since last update.

[Amazon] Philips Hue(ヒュー) Dimmer スイッチ

主なサービス

HMServiceType 説明
StatelessProgrammableSwitch ステートレス・プログラマブル・スイッチ
Battery バッテリー

主なキャラクタ

HMCharacteristicType 説明 フォーマット 書き込み
InputEvent プログラマブル・スイッチ・イベント uint8 -
BatteryLevel 電池残量 uint8 -
ChargingState 充電の状態 uint8 -
StatusLowBattery 状況(電池残量低下) uint8 -

概要

スマートIoT照明のパイオニアであるPhilips Hueのランプのプログラマブルスイッチです。

Hueの公式ページにもAppleのHomeKit対応製品一覧にもこの製品がHomeKit対応しているとは書かれていなかったのですが、購入して利用してみたらHomeKit対応していて驚きました。
単体で買えば3000円程度とHomeKit対応したプログラマブルスイッチとしては格安です。

なお、この製品を動作させるにはHueのブリッジが必要であることに注意が必要です。
逆に、Hueのブリッジがあれば、Hue以外の(HomeKit対応した)ランプのコントロールにも利用できます。
HomeKit的には単なるプログラマブルスイッチですので、ランプの点灯/消灯以外のあらゆる操作にも対応可能です。

この製品は電池で動作しますので電池残量関連のキャラクタも参照可能です。

InputEventをトリガーとするサンプルコード

InputEventをトリガーとして特定のシーンを実行する、具体的には、ボタンを押したらランプを点灯/消灯するサンプルコードを紹介します。

なお、単にシーンを実行するだけならコードを書かなくともApple純正のHomeアプリで設定できますので、ここでは、

  • ランプが消灯していれば点灯する
  • ランプが点灯していれば消灯する

とトグルになるサンプルとします。

// 設定したいボタンのInputEventを探す
// このサンプルでは適当な1つのInputEventを取得
let service = home.servicesWithTypes([HMServiceTypeStatelessProgrammableSwitch])?.first
let candidates = service?.characteristics.filter { $0.characteristicType == HMCharacteristicTypeInputEvent }
guard let inputEvent = candidates?.first else {
    return
}

// InputEventが取り得る値は0のみ
let event = HMCharacteristicEvent(characteristic: inputEvent, triggerValue: NSNumber(value: 0))

let powerState = //< チェック対象のランプのPowerStateキャラクタ

// ランプが点灯中の場合という条件を作る
let onState = HMEventTrigger.predicateForEvaluatingTrigger(
    powerState,
    relatedBy: .equalTo,
    toValue: true
)

// ランプが点灯中なら消灯するというトリガを作る
let offTrigger = HMEventTrigger(name: "点灯->消灯", events: [event], predicate: onState)
let lightOff = //< ライトを消灯するシーン
home.addTrigger(offTrigger) { error in
    offTrigger.addActionSet(lightOff) { error in
        offTrigger.enable(true) { error in
            // エラー処理などは省略
        }
    }
}

// ランプが消灯中の場合という条件を作る
let offState = HMEventTrigger.predicateForEvaluatingTrigger(
    powerState,
    relatedBy: .equalTo,
    toValue: false
)

// ランプが消灯中なら点灯するというトリガを作る
let onTrigger = HMEventTrigger(name: "消灯->点灯", events: [event], predicate: offState)
let lightOn = //< ライトを点灯するシーン
home.addTrigger(onTrigger) { error in
    onTrigger.addActionSet(lightOn) { error in
        onTrigger.enable(true) { error in
            // エラー処理などは省略
        }
    }
}

まとめ

なんやかんや物理スイッチが便利というのと、HomeKitでの遊び道具として、Hueをお持ちのかたにとっては安価で有用なプログラマブルスイッチです。
設定可能なボタンも4つありますので、遊びかたにも幅ができます。

もちろん、HomeKitなしでもHueのランプのコントローラとして普通に便利です。

iOS 11 Programmingについて

この記事は「iOS 11 Programming」の 第12章 HomeKit入門とiOS 11における新機能 の中の 12.4.2 HomeKit 対応製品利用実例 への追加コンテンツ的位置付けにもなっています。
この製品がサポートするサービス(HMService)やキャラクタ(HMCharacteristic)の表など、全てこの書籍に合わせた形で掲載しております。

「iOS 11 Programming」にご興味のあるかたは是非、以下リンクからご参照ください。


iOS 11 Programming

5
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tokorom

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
5
Help us understand the problem. What is going on with this article?