Help us understand the problem. What is going on with this article?

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

More than 1 year has 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

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした