Secret Staircase

人を感知して玄関のライトを自動的に点ける (Hue Motion Sensor+SwitchBot)

Jan 25, 2019

人が来たら玄関(外側)のライトを自動的に点灯させるようにしました。SwitchBot を使ってスイッチを押します。SwitchBot は HomeKit に対応していないので Homebridge を使って対応させました。

構成

こういう構成です。

  • Hue Motion Sensor: 人感センサーと明るさセンサー
  • SwitchBot: 玄関ライトの物理スイッチを押す
  • Homebridge (on Raspberry Pi)
  • Eve for HomeKit (iOS 用アプリ)

Hue Motion Sensor はメインの人感センサーの他にも明るさと気温のセンサーが付いています。今回は明るさセンサーも使って暗いときに人が来たときだけスイッチを入れるようにします。

SwitchBotは物理的にスイッチを押すデバイスです。今回のケースだと理想的には照明が IoT なものだったらよかったのですが Hue が取り付けられるようなソケットではなかったので断念。電源をスマートプラグに刺せれるならそれもよかったのだけれど、電源オンオフには賃貸マンション備えつけの物理スイッチを押すしかありませんでした。

SwitchBot はスマートホームにおける最終手段ですね。

SwitchBot には標準(押すだけ)モードと壁スイッチモードがあります。壁スイッチモードにすると押す動作と引く動作が使えるようになり、スイッチに紐をくっつけておくことで引く動作でオフにすることができます。これで右がオン、左がオフ(逆も可)なスイッチに対応します。詳しくは公式サイトを見てください。

SwitchBot 取り付け

玄関(内側)にスイッチがあるのでそこに取り付けます。

IMG 0412

見た目がだいぶ悪いですがスマートホームのためには目をつぶることにします。 スイッチや SwitchBot に付いてるぺらぺらしているのは3M のコマンドフックです。SwitchBot には別の 3M の両面テープが付属していますがきれいにはがせるのかわからなかったのでコマンドフックを使いました。

余談ですがこのコマンドフックは賃貸の部屋でスマートホームをしようとすると大活躍します。はがす時に引っ張る部分が露出するので見た目は悪くなりますが壁紙を痛めにくいです。

SwitchBot を取り付けたスイッチは手動で押そうと思えば押せます。でも押しにくいので常用するなら SwitchBot 化しない方がいいと思います。もしくは別の IoT スイッチを用意してそっちに SwitchBot が連動するようにする方法もあります。うちでは別の箇所でこの方法を使っているので後日紹介したいと思います。

SwitchBot 設定

公式のアプリにより設定します。

  • 壁スイッチモードにする
  • アドレスを記録しておく(後で使います)

Homebridge 設定

SwitchBot には Hub Plus という製品があって、それにより SwitchBot をインターネット経由で操作したり Alexa から操作したりできるようになるのですが残念ながら HomeKit には対応していません。そこで SwitchBot を BLE 経由で接続する方法を使います。これなら Hub Plus は必要ありせん。

SwitchBot は BLE で操作できます。公式の GitHub リポジトリに Python スクリプトがあり、この内容から壁スイッチモードのときには以下の動作となることがわかります。

  • 0x001657 01 01を書き込むとオン
  • 0x001657 01 02を書き込むとオフ

また0x0016の値を読み出すことで現在の状態もわかります。

Raspberry Pi の場合は gatttool を使うと簡単に読み書きができます。

更新 SwitchBot を確実に操作するために[こちらの方法]({{< ref “improve-switchbot-reliability.md” >}})を使うのがおすすめです

Homebridge と統合するにはhomebridge-script2プラグインを使います。config.json にこのようなアクセサリを追加します。

"accessories": [
  {
    "accessory": "Script2",
    "name": "Switchbot1",
    "on": "gatttool -t random -b <SwitchBotのアドレス> --char-write-req -a 0x0016 -n 570101",
    "off": "gatttool -t random -b <SwitchBotのアドレス> --char-write-req -a 0x0016 -n 570102",
    "state": "gatttool -t random -b <SwitchBotのアドレス> --char-read -a 0x0016",
    "on_value": "Characteristic value/descriptor: 57 01 01"
  }
]

on_valuestateコマンドの出力が一致したらオンと判断する文字列です。gatttool --char-readCharacteristic valueから始まる文字列を返してきます。

Hue Motion Sensor 取り付け&設置

こちらは特別なことはありません。普通に設定すればよいです。

本来この製品は屋内用ですので玄関の外側に設置することはできません。ただ屋根のあるところで雨に濡れないなら大丈夫じゃないかと思い設置しました。こちらのコメント(Reddit)でも軒下で使ってて今のところ大丈夫とありましたが、自己責任でお願いします。

うちは幸運なことに玄関に鉄製のプレートがあったため Hue Motion Sensor 付属の磁石で簡単に設置できました。

IMG 0415

HomeKit 設定

さて、いよいよ HomeKit のオートメーションを設定すれば完了です。 オートメーションの設定としては次の両方が満たされる場合にオンにしたいところです。

  • Hue Motion Sensor が人の動きを感知
  • Hue Motion Sensor の明るさが低い

ところが Apple の Home.app ではこうした複数条件を設定することができないし、また単体であっても Hue Motion Sensor の明るさを条件にすることもできません。

これは HomeKit の制限ではないらしくサードパーティー製のアプリで設定することができます。今回はEve for HomeKitを使いました。無料で高機能、おすすめです。

このような設定にしました。

IMG 0486

まとめ

人が来たら玄関(外側)のライトを自動的に点灯させるようにしました。SwitchBot を使ってスイッチを押します。SwitchBot は HomeKit に対応していないので Homebridge を使って対応させました。

最初は macOS で Homebridge を動かしていてなんとか BLE を使えないかと試行錯誤していましたが macOS には gatttool のようなツールがないので自分でプログラムを書く必要があり手軽ではありません。そこで Raspberry Pi を導入したところ gatttool で簡単に SwitchBot を操作することができました。

夜に帰ってくるとパチっと灯りが点くのは(自己)満足感が高いです。