2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

HueのRemoteAPIでライトを制御してみた

Posted at

はじめに

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を使用できるようになるまでの流れ

  1. Remote Hue API appsへの登録
  2. AuthTokenの取得
  3. ユーザID/whilelistの取得
  4. ライトの状態取得
  5. ライトの制御

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

スクリーンショット 2018-09-27 23.37.24.png

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}'
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?