Raspberry Pi の Rails で Hue をコントロールできるようにしてみた
土曜日の朝、仕事をしていたら最近あまり使っていない Raspberry Pi と本体ジャストサイズの多分 3.5 インチくらいのタッチパネルがあったので、書斎用に時計を作ってみました。
時計自体は HTML と JavaScript と CSS でなんとかなるなー、と思ったのですが、どうせなら部屋の照明(自宅の照明は基本的にほとんど Hue)もコントロールしたくなってしまって、じゃあ Rails で作ってみようと。なので HTML は haml、JavaScript ではなくて CoffeeScript で書いたんですが・・・。ちなみに時計の下に表示されている天気はテキトーに API 叩いて取ってるんですが、今回はそっちは端折ります。
そんなわけで Hue を Ruby から扱う方法の備忘録。
Hue を操作する gem と下準備
そのままその通り、Hue という名前の gem があったので使ってみます。
# Gemfile
gem 'hue'
Gemfile に追加したら bundle install
。
ここで Hue 自体のお作法なのですが、Hue ブリッジと外部操作端末(今回の場合は rails を動かすサーバー)をリンクさせる必要があります。今回使った gem の場合ブリッジのスイッチを押してから30秒以内に irb で以下のように Hue::Client のインスタンスを初期化してやることでリンクされました。
irb(main):001:0> a = Hue::Client.new
これで rails サーバー側から Hue にアクセスできるようになりました。
電球を操作する
以下のコードで Hue ブリッジに接続されている電球の一覧が配列で取れます。
irb(main):002:0> a.lights
単一の電球を取得するには単純に上記で取れた配列に添字を与えればOKなのですが、自宅の場合は9個の Hue 電球があったので、どのインデックスにどの電球が入っているかよくわからずに、とりあえず最初に以下のような感じで何番目にどの電球が入っているか確認してメモしておきました。
irb(main):003:0> a.lights[1].name
=> "デスク"
電球が特定できれば操作は簡単。
まず電球のオン/オフ。
client = Hue::Client.new
light = client.lights[1]
light.on!
light.off!
照明の輝度は以下のように。0〜254で指定できるみたいでした(ちなみに 0 がオフではなく、最小輝度)
# 照明を一番明るくする
light.brightness = 254
# 照明を一番暗くする
light.brightness = 0
照明のグループでも操作する方法があるのですが、グループの設定とか面倒だったりしたので、今回は試しませんでした。