💡

Macと一緒に部屋を起動する

2022/03/21に公開

TL;DR

これです。
wakeup_room

そうです!Macを起動すると同時に電気をつけて部屋を起動しました!
なんかかっこいい!なんかかっこいい!

これ以上言いたいことはないのですが、技術記事なのでどうやってこれを実現しているかをご紹介します。


レシピ

材料

名前 数量
部屋 1
Hue 部屋の電球の数だけ
Hueブリッジ 1
Hueアプリ 1

(セットも購入できます。)

手順

やっていることはとても単純です。以下の流れで進めます。

① Hueをプログラムでつける/消す
② Macの起動/スリープ時にプログラムを実行する
③ ①と②をくっつける


① Hueをプログラムでつける/消す

HueブリッジのIPアドレスを調べる

Hueの操作は、HueブリッジにHTTPリクエストを送ることで実現できます。

そのために、まずはHueブリッジのIPアドレスを調べます。

方法

  1. Hueのアプリを開きます。
  2. 設定 > わたしのHueシステム > Hueブリッジを選択します。
  3. 画面からIPアドレスを確認できます。

IPアドレスを確認

IPアドレスはこの後のリクエストで使用するので、控えておきます。

デバッガーを使ってHueを操作する

Hueブリッジ上にはAPIを試せるデバッガー(CLIP API Debugger)が用意されています
こちらを使ってHueの操作を試していきます。

http://<ブリッジのIPアドレス>/debug/clip.html

にアクセスすることで、以下のような画面が表示されるはずです。
CLIP API Debugger

ユーザーを作成する

最初にAPIを利用するユーザーを作成します。

  1. Hue ブリッジの真ん中のボタンを押します。(※ 押さないと次のステップで認証エラーになります。)
  2. URL: /api
    Body: {”devicetype”: “{任意の文字列}”}
    メソッド: POST
    でリクエスト送ります。
    成功すると以下のようにusername が返ります。

ユーザーを作成する
このusername をこの後のリクエストで利用するのでコピーしておきます。

Hueの一覧を取得する

Hueの一覧を取得するには
メソッド: GET
URL: /api/{username}/lights
で取得することができます。

Hueの一覧を取得する

登録してあるHueの一覧が数字をキーにして返却されます。

{
  "3": {
    "state": {
      "on": true,
      "bri": 254,
      "alert": "select",
      "mode": "homeautomation",
      "reachable": true
    }
  },
  "4": {
    "state": {
      "on": true,
      "bri": 254,
      "alert": "select",
      "mode": "homeautomation",
      "reachable": true
    }
  }
}

stateのonのBooleanが電気のついている/ついていない状態を表します。
この後つけたり消したりできるように部屋の電球の番号を控えておいてください。

Hueをつける、消す

いよいよHueを操作します。
操作したいhueのstateをPUTで更新することでHueををつけたり消したりできます。

つける場合
メソッド: PUT
URL: /api/{username}/lights/{hueの番号}/state
Body: {"on": true}

つける場合

消す場合
メソッド: PUT
URL: /api/{username}/lights/{hueの番号}/state
Body: {"on": false}

消す場合

プログラムを作成する

HueをAPIから操作できるようになりました💡
最後に部屋の電気をつけたり消したりするプログラムを作成しておきます。
と言っても簡単でhttpリクエストをcurlで実行するshellを書くだけです。

ブリッジのIP: 192.168.1.20
username:sAWVQqrYVAUgrOfpGBqphwvEr2suYZWZruc4wFGi
Hueの番号: 12
の場合プログラムは以下のようになります。

wakeup_room.sh

// Hue1と2をつける
curl -X PUT http://192.168.1.20/api/sAWVQqrYVAUgrOfpGBqphwvEr2suYZWZruc4wFGi/lights/1/state -d '{"on":true}'
curl -X PUT http://192.168.1.20/api/sAWVQqrYVAUgrOfpGBqphwvEr2suYZWZruc4wFGi/lights/2/state -d '{"on":true}'

sleep_room.sh

// Hue1と2を消す
curl -X PUT http://192.168.1.20/api/sAWVQqrYVAUgrOfpGBqphwvEr2suYZWZruc4wFGi/lights/1/state -d '{"on":false}'
curl -X PUT http://192.168.1.20/api/sAWVQqrYVAUgrOfpGBqphwvEr2suYZWZruc4wFGi/lights/2/state -d '{"on":false}'

② Macの起動/スリープ時にプログラムを実行する

自前でやろうとすると大変なので、サードパーティーのsleepwatcherを使用します。

  1. sleepwatcherをインストールします。
brew install sleepwatcher

これで、sleepwatcherコマンドを使ってMacの起動/スリープ時に任意のスクリプトを実行できるようになります。

sleepwatcher -w '起動時に実行したいプログラム' -s 'スリープ時に実行したいプログラム'

動作するか確認しておきましょう。

sleepwatcher -V -w 'echo wakeup' -s 'echo sleep' 

スリープ、スリープから復帰させてみて以下のように表示されればOKです。
watch


③①と②をくっつける

最後に①と②をくっつけて、

起動(※ログイン/電源をつけた場合の起動)時に

  • 起動(※スリープから復帰した時)時 → wakeup_room.sh
  • スリープ時 → sleep_room.sh

が実行されるように以下のコマンドをbashrcなどに貼り付けて完成です!

sleepwatcher -w path/to/wakeup_room.sh -s path/to/sleep_room.sh

まとめ

部屋を起動するともうなんかかっこいいですね!
今回はHueのみでしたが、エアコンやカーテンなども操作できれば、さらにいい感じに部屋を起動できそうです!お試しあれ!

参考リンク:
https://developers.meethue.com/develop/get-started-2/

Discussion