HUISでHueを操作してみた。

sonyで販売されているHUIS(学習リモコン)で、philipsのHueを操作してみました。


動画を後ほど上げる予定です・・・。




# 使ったもの
[HUIS REMOTE CONTROLLER](http://huis.jp/remote-controller/)

以降 HUISと略して説明します。

[HUIS BLUETOOTH® CRADLE](http://huis.jp/remote-controller/cradle/)
以降 CRADLEと略して説明します。

[Raspberry Pi 3 MODEL B](https://www.amazon.co.jp/dp/B01CFHHYF4/ref=cm_sw_r_tw_dp_x_xp4VybVR9MT2X )
※Raspberry Pi 2 MODEL Bなどでも、bluetoothドングルを挿せば動くと思います。

[Philips Hue(ヒュー) スターターセット](https://www.amazon.co.jp/dp/B01C6S7DDU/ref=cm_sw_r_tw_dp_x_Nq4VybMQH1KND)
※利用したのはv1ですが、今買うならv2のほうがいいかも。




# 簡単なシステム
HUISとCRADLEをペアリング後、raspberryPiとCRADLEをペアリングします。
node-redと、[node-red Library](https://flows.nodered.org/)の中にある、[node-red-contrib-keypress](https://flows.nodered.org/node/node-red-contrib-keypress)をインストールし、HUISのキー入力を取得します。
node-redのLibraryである、[node-red-contrib-hueplus](https://flows.nodered.org/node/node-red-contrib-hueplus)を利用して、hueを操作します。


# やり方
Raspberry Piのセットアップなどは、Qiitaにある別の記事などを参考にしてください。
RaspbianがインストールしてあればOKです。

## raspberryPi側

まずは、raspberryPiにnodeをインストールしましょう。
Qiitaにある、[Ubuntuに最新のNode.jsを難なくインストールする](http://qiita.com/seibe/items/36cef7df85fe2cefa3ea)を参考にしました。

コマンドの詳細はリンク先を見てください。

```bash
sudo apt-get install -y nodejs npm
sudo npm cache clean
sudo npm install n -g
sudo n stable
sudo ln -sf /usr/local/bin/node /usr/bin/node
sudo apt-get purge -y nodejs npm
```
上記コマンドでnodeのインストールが完了しました。

次にnode-redをインストールしましょう。
[Node-RED日本ユーザ会](https://nodered.jp/docs/getting-started/installation)を参考にしています。
インストールは簡単で、以下のコマンド1行です。

```bash
sudo npm install -g --unsafe-perm node-red
```

これでインストールが完了しました。
試しに起動してみましょう。

```bash
node-red
```
で起動します。
raspberryPiのブラウザからアクセスする場合には
 http://localhost:1880.

同一ネットワーク内の、別の端末からアクセスするには
http://[raspberryPiのipアドレス]:1880

でアクセス可能です。

以下のようなwebページが表示されれば成功です。
![Screenshot from 2017-03-08 13-48-18.png](https://qiita-image-store.s3.amazonaws.com/0/43598/19d316de-90df-92eb-c5ae-2cda38df6d4f.png)



終了するには、[Ctrl]+[C]を押してプログラムを停止させましょう。

次に、[node-red-contrib-keypress](https://flows.nodered.org/node/node-red-contrib-keypress)と、[node-red-contrib-hueplus](http://flows.nodered.org/node/node-red-contrib-hueplus)をインストールします。


node-red-contrib-keypressと、node-red-contrib-hueplusをインストールする前に、必ず1度node-redを起動させてください。

```bash
cd ~/.node-red/
npm install node-red-contrib-keypress
npm install node-red-contrib-hueplus
```
上記コマンドでインストール完了です。

node-redを起動してみましょう。

以下のように、keypress,hue set ,hue stateが左側に表示されていればokです。


hueplusの使い方は、[Node-REDからPhilips hueを操作する方法](https://digital-light.jp/2017/03/02/how-to-connect-philips-hue-with-node-red/)を参考にしています。

![Screenshot from 2017-03-08 13-49-45.png](https://qiita-image-store.s3.amazonaws.com/0/43598/0f59a195-c87f-affa-ece5-6fa850da6efa.png)




## node-redで配線

![Screenshot from 2017-03-08 14-24-44.png](https://qiita-image-store.s3.amazonaws.com/0/43598/3359611e-1f78-954e-6831-30cbae76b53c.png)

上の画像のようにnode-redのブロックを設置していきましょう。



まずは、splitの設定をしましょう。
splitをダブルクリックし、

[\n]
と書かれているところを、
["]
に書き換えてください。


次にswitchの設定をしましょう。
switchをダブルクリックし、設定画面を開きます。

![Screenshot from 2017-03-08 14-51-45.png](https://qiita-image-store.s3.amazonaws.com/0/43598/4b08cf47-5313-d55f-57fa-4c1427c81638.png)

左下にある、追加をクリックし、要素を1つ追加しましょう。
今回は、[a] と [s] キーを押したときにon offが制御できるようにします。

下の画像のように、 [==]
の隣に、[a]と[s]を入力してください。

![Screenshot from 2017-03-08 14-52-58.png](https://qiita-image-store.s3.amazonaws.com/0/43598/795a630b-d1e6-3666-33b5-5302c0c482c6.png)







Hue setの部分と、その前のTemplateのブロックにいくつか設定が必要なので書いていきましょう。

Hue setをダブルクリックすると、以下の画面が出てきます。
![Screenshot from 2017-03-08 14-27-57.png](https://qiita-image-store.s3.amazonaws.com/0/43598/f087909c-4aa0-832c-b711-10f37bd6a0ec.png)


新規にhueを追加の右隣りにある鉛筆をクリックしましょう。

![Screenshot from 2017-03-08 14-29-35.png](https://qiita-image-store.s3.amazonaws.com/0/43598/87ae5cc8-b965-bb5f-9282-3a881a014bbe.png)

Nameは何でもいいです。
Bridgeには、Hue Bridgeのipアドレスを入力してください。
API KEYには、Hue Bridgeのボタンを押したあと、右側の矢印を押すことで自動で入ります。
すべて入力が済んだら、右上の追加ボタンを押しましょう。

以下の画像の画面に戻ったら、
![Screenshot from 2017-03-08 14-37-24.png](https://qiita-image-store.s3.amazonaws.com/0/43598/ed997f24-6ace-afda-9363-e1cae8123cf9.png)

Lightの右側にある、虫眼鏡をクリックしましょう。
Lightの隣のをクリックすると、リストが出てきます。自分が操作したいhueを選択しましょう。
右上の完了を押して、hueplusブロックの設定は完了です。

次に、Templateの設定をしましょう。
Templateをダブルクリックして、以下の画面を開きます。

![Screenshot from 2017-03-08 14-41-30.png](https://qiita-image-store.s3.amazonaws.com/0/43598/68dcbb95-bf92-c537-0165-34e14843648c.png)


Syntax Highlight: の部分を、JSONにしましょう。

```
This is the payload: {{payload}} !
```
と書かれている部分を消し、

```JSON
{"on":true}
```
となるようにしましょう。
![Screenshot from 2017-03-08 14-44-10.png](https://qiita-image-store.s3.amazonaws.com/0/43598/e0f933f5-6341-6d85-f8ee-3af5d98e5e6c.png)

画像のようになっていればOKです。

もう片方のTemplateには、

```JSON
{"on":false}
```
を設定しましょう。


# 実行

ここまで設定できたら、右上のデプロイを押してみましょう。HUISのキーボードから設定したキーを押すことで、HueのON OFFができるはずです！

**ここで注意です**
キーボードの入力を取得する際、node-redを立ち上げた端末(コンソール)が選択状態でないと、入力が検知できないので、注意してください。

私の環境では、raspberryPiとCradleをペアリングし、raspberryPiにhdmiでモニタを繋いで、端末(コンソール)を立ち上げたあと、

```
node-red
```
コマンドを叩いて、実行させて放置しています。


Hueの色を変えたいなどの場合は、

```JSON
{"on":false}
```
と書いていた部分に要素を追加してあげれば問題ないです。
Hueのweb apiで送っていたjsonと同じものを送ってください。



## 今回設定したnode-redの設定データを置いておきます。

```JSON
[
    {
        "id": "d553ba35.3e6078",
        "type": "tab",
        "label": "フロー 1"
    },
    {
        "id": "4bda6413.26d48c",
        "type": "keypress",
        "z": "d553ba35.3e6078",
        "key": "",
        "x": 114,
        "y": 320,
        "wires": [
            [
                "28e10199.d4c59e"
            ]
        ]
    },
    {
        "id": "b9e9abcc.adf088",
        "type": "switch",
        "z": "d553ba35.3e6078",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "a",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "s",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "outputs": 2,
        "x": 112,
        "y": 454,
        "wires": [
            [
                "ffbd5c2.36d9ca"
            ],
            [
                "d677a402.3ce3b8"
            ]
        ]
    },
    {
        "id": "28e10199.d4c59e",
        "type": "split",
        "z": "d553ba35.3e6078",
        "name": "",
        "splt": "\"",
        "x": 112,
        "y": 389,
        "wires": [
            [
                "b9e9abcc.adf088"
            ]
        ]
    },
    {
        "id": "e54fd19b.d16fe",
        "type": "debug",
        "z": "d553ba35.3e6078",
        "name": "",
        "active": true,
        "console": "false",
        "complete": "false",
        "x": 688,
        "y": 404,
        "wires": []
    },
    {
        "id": "1616f13e.fe181f",
        "type": "hue-set",
        "z": "d553ba35.3e6078",
        "bridge": "",
        "light": "",
        "name": "",
        "x": 500,
        "y": 460,
        "wires": [
            [
                "e54fd19b.d16fe"
            ]
        ]
    },
    {
        "id": "d677a402.3ce3b8",
        "type": "template",
        "z": "d553ba35.3e6078",
        "name": "",
        "field": "payload",
        "fieldType": "msg",
        "format": "json",
        "syntax": "mustache",
        "template": "{\"on\": true}",
        "x": 325,
        "y": 461,
        "wires": [
            [
                "1616f13e.fe181f"
            ]
        ]
    },
    {
        "id": "91373653.554858",
        "type": "hue-set",
        "z": "d553ba35.3e6078",
        "bridge": "",
        "light": "",
        "name": "",
        "x": 497,
        "y": 332,
        "wires": [
            [
                "e54fd19b.d16fe"
            ]
        ]
    },
    {
        "id": "ffbd5c2.36d9ca",
        "type": "template",
        "z": "d553ba35.3e6078",
        "name": "",
        "field": "payload",
        "fieldType": "msg",
        "format": "json",
        "syntax": "mustache",
        "template": "{\"on\":false}",
        "x": 321,
        "y": 332,
        "wires": [
            [
                "91373653.554858"
            ]
        ]
    }
]
```