読者です 読者をやめる 読者になる 読者になる

もみあげあしめ

組み込みとかIoTとか、いろいろ

Raspberry Pi で Philips Hue を操作する

しゃれおつなインテリアに囲まれて、リア充を満喫している…という夢を見たんだ。

f:id:shima_nigoro:20160605175905p:plain:w300

この記事では Python を使って Philips Hue を制御する方法について、まとめていきます。

まとめより使えそうなコードが欲しいという方は下記の記事へ

1. ライブラリのインストール

Hue を操作するために Python のライブラリ phue を利用します。

sudo pip install phue

pip が使えなかった方は下記コマンドでインストール
#ちゃっかりcurlもインストールしていますが

sudo apt-get install curl
sudo curl -kL https://bootstrap.pypa.io/get-pip.py | python

※環境によってはエラー出るかも知れませんが、その時は管理者権限で実行してください。

2. ブリッジへ接続してランプを点灯させる

2.1.下記を適当な名前(connect_hue.py)で保存する

#!/usr/bin/python
from phue import Bridge

b = Bridge('192.168.180.2')

# If the app is not registered and the button is not pressed,
# press the button and call connect() (this only needs to be run a single time)
b.connect()

# Turn lamp 1 on
b.set_light(1,'on', True)

※ ip_of_your_bridge には Hue Bridge のIPアドレスを指定する。

2.2. ブリッジのボタンを押して30秒以内に保存したスクリプトを実行する

python connect_hue.py

2.3.対応するランプ(1つ目のランプ)が点灯する。

上記スクリプト内のconnectの実行は最初の1度だけで、以降は不要となります。

3. HSV色空間について

Philips Hueでは光源の色をHSV表色系で表現しています。
HSV表色系がわからない方は、まず HSV色空間 - Wikipedia を一読しましょう。

4. いろいろ試してみる

スクリプトごとにIPアドレスを書くのが面倒なので、HueブリッジのIPアドレスを保存しておく

echo 192.168.XXX.XXX > my_hue_bridge_ip

※個人的にはHueブリッジのIPアドレスは固定にしておくほうがよいかと。

いよいよ下記からは、Pythonランプ1の明度、色相、彩度を制御していきます。
ランプ1以外を制御したい場合はスクリプト内の lights の配列の添え字を任意で変えてください。

明度( Value = Brightness )の変更

・下記を set_brightness.py として保存

#!/usr/bin/python
import sys
from phue import Bridge

if ( (len(sys.argv) < 2) or (int(sys.argv[1]) < 0) or (int(sys.argv[1]) > 255)):
    print 'Usage: # python %s 0-255' % sys.argv[0]
    quit()

try:
	f = open('my_hue_bridge_ip', 'r')
except IOError:
	print 'do "echo your_hue_bridge_ip > my_hue_bridge_ip"\n\
ex) echo 192.168.0.123 > my_hue_bridge_ip'
	quit()
else:
	BRIDGE_IP = f.readline().rstrip()
	f.close()

b = Bridge(BRIDGE_IP)
lights = b.get_light_objects('id')

BRIGHTNESS = int(sys.argv[1])

if(BRIGHTNESS != 0):
	lights[1].on = True
	lights[1].brightness = BRIGHTNESS
else:
	lights[1].on = False

・明度を変える

python set_brightness.py 0255までの設定したい明度

※明度 0 で OFF するようにスクリプトを組んでいます。
ちなみに明度は細かく設定できますが、見た目の変化は小さいです。

色相( Hue )の変更

・下記を set_hue.py として保存

#!/usr/bin/python
import sys
from phue import Bridge

if ( (len(sys.argv) < 2) or (int(sys.argv[1]) < 0) or (int(sys.argv[1]) > 65535)):
    print 'Usage: # python %s 0-65535' % sys.argv[0]
    quit()

try:
	f = open('my_hue_bridge_ip', 'r')
except IOError:
	print 'do "echo your_hue_bridge_ip > my_hue_bridge_ip"\n\
ex) echo 192.168.0.123 > my_hue_bridge_ip'
	quit()
else:
	BRIDGE_IP = f.readline().rstrip()
	f.close()

b = Bridge(BRIDGE_IP)
lights = b.get_light_objects('id')

HUE = int(sys.argv[1])

lights[1].on = True
lights[1].hue = HUE

・色相を変える

python set_hue.py 065535までの設定したい色相

※色相変更時に ON するようにスクリプトを組んでいます。

彩度( Saturation )の変更

・下記を set_saturation.py として保存

#!/usr/bin/python
import sys
from phue import Bridge

if ( (len(sys.argv) < 2) or (int(sys.argv[1]) < 0) or (int(sys.argv[1]) > 255)):
    print 'Usage: # python %s 0-255' % sys.argv[0]
    quit()

try:
	f = open('my_hue_bridge_ip', 'r')
except IOError:
	print 'do "echo your_hue_bridge_ip > my_hue_bridge_ip"\n\
ex) echo 192.168.0.123 > my_hue_bridge_ip'
	quit()
else:
	BRIDGE_IP = f.readline().rstrip()
	f.close()

b = Bridge(BRIDGE_IP)
lights = b.get_light_objects('id')

SATURATION = int(sys.argv[1])

lights[1].on = True
lights[1].saturation = SATURATION

・彩度を変える

python set_saturation.py 0255までの設定したい彩度

※彩度変更時に ON するようにスクリプトを組んでいます。

いろいろ試すためのスクリプトは以上です。
他にも色が変わっていく時間を変えたり、全ランプをまとめて制御したりできますが、
基本的には明るさや色を変えるような使い方がメインになるのではないでしょうか。

スクリプトにしておくと簡単にコマンドラインから実行できるので cron と組み合わせたり、
system 関数を使って C のプログラムから呼んだりできるのがいいですね。

補足

スクリプトデバッグする

・下記を from phue import Bridge の後ろに追記すると、phueがログを吐いてくれます。

import logging
logging.basicConfig()
logger = logging.getLogger(__name__)
logger.addHandler(logging.NullHandler())

スクリプトを自分でカスタマイズするときにはどうぞ。

参考サイト

GitHub - studioimaginaire/phue: A Python library for the Philips Hue system
Philips Hue API |

Philips Hue(ヒュー) スターターセット v2   929001156101

Philips Hue(ヒュー) スターターセット v2 929001156101

Raspberry Pi 3 Model B (Element14)

Raspberry Pi 3 Model B (Element14)