はじめに
PhilipのHueをRemoteAPIで制御する方法をまとめてみた。
事前に準備するもの
Hueライト
Hue Bridge
Hue developer Programへの登録(https://developers.meethue.com/)
Bridgeの登録 (https://account.meethue.com)
Hueライトと Hue Bridgeのローカル接続
RemoteAPIを試す前に、ローカルにHueライトとBridgeを配置した状態で制御すると理解が深まる。
詳細な手順はここでは省く。
以下の公式サイトに手順が詳しく載っている。
https://developers.meethue.com/documentation/getting-started
HueのRestAPIを使用できるようになるまでの流れ
- Remote Hue API appsへの登録
- AuthTokenの取得
- ユーザID/whilelistの取得
- ライトの状態取得
- ライトの制御
1. Remote Hue API appsへの登録
この登録をしないと、RemoteAPIは使用できない。
以下の記述は必須。
- App Name: 任意のアプリケーション名。
例)sampleHueApp - CallbackURL: OAuthによる認証成功時にリダイレクトするURL。
トークン発行時にCallbackURL先へのレスポンスコードを使用するため存在するURLをしていする必要がある。
トークン発行用に超簡易サーバーを立てて、リダイレクト先に指定した。
例)http://localhost:9000 - Application desciption: アプリの特徴(なんでもいい)
例) OAuth control
ローカルに簡易Webサーバーを立てる
CallBackURLを受けれる様にローカルに超簡易サーバー(Web Server for Chrome)を立てる。ここでは、
https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb?hl=ja
2. AuthTokenの取得
ブラウザから、下記アカウントにアクセスして、途中api.meethue.comにログインする。
https://api.meethue.com/oauth2/auth?clientid=&response_type=code&state=xUvdhs&appid=&deviceid=mydeviceid&devicename=mydevicename
設定項目 | 設定項目 | 設定例 |
---|---|---|
clientid | 1. で発行されたclientid | U4kdidlYHJduJ5d |
response_type | response_typeの値(固定) | code |
state | レスポンスを受けた時の状態設定(任意どんな文字列でもOK) | xUvdhs |
appid | 1. で発行されたappname | sampleHueApp |
deviceid | デバイスid(任意どんな文字列でもOK) | mydeviceid |
devicename | デバイス名(任意どんな文字列でもOK) | mydevicename |
上記をブラウザで実行すると、ローカル立てた簡易Webサーバーに以下のレスポンスコードが返ってくる。
ここのcode=XvXXkQHxの部分は後のトークン取得で使用するのでメモっておくこと。
トークンの取得
トークンの取得にはダイジェスト認証とBasic認証の2種類のがあるが、ここではBasic認証でトークン取得をする。
トークンの取得はPOSTで実行し、 clientidとclientsecretは1で取得したものを使用する。
base64のエンコードした文字列を設定すること。
ヘッダー部には、Authorization: Basic を設定する。
エンコード文字列は以下で取得できる
echo -n "<clientid>:<clientsecret>" | openssl enc -e -base64
eEEXh4CXXXXXXX==
# トークンの取得リクエスト
curl -X POST https://api.meethue.com/oauth2/token?code=XvXXkQHx&grant_type=authorization_code -H "Authorization: Bearer eEEXh4CXXXXXXX=="
# レスポンスコード
{
"access_token": "XXXXXXXXXXXXXXXXXXXX", ←これがアクセストークンになる。
"access_token_expires_in": "XXXXXXXXXXXXX",
"refresh_token": "XXXXXXXXX",
"refresh_token_expires_in": "XXXXXXXXXX",
"token_type": "BearerToken"
}
3. ユーザID/whilelistの取得
curl -X GET https://api.meethue.com/v2/bridges/ -H 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXX'
## レスポンス
[
{
"success": {
"username": “*****"
}
}
]
4. ライトの状態取得
curl -X GET https://api.meethue.com/bridge/<username>/lights -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXX" | python -m json.tool
{
...
"state": {
"alert": "none",
"bri": 254,
"colormode": "ct",
"ct": 366,
"mode": "homeautomation",
"on": true,
"reachable": true
...
}
5. ライトの制御
# ライトの消灯
curl -X PUT https://api.meethue.com/bridge/<username>/lights/1/state -H "Authorization: Bearer XXXXXXXXXXXXXXXXXX" -H "Content-Type: application/json" -d '{"on":false}'