環境
RaspberryPi / Linux raspberrypi 5.10.63
Philips Hue / Version4.8.0
構成
Node-RED
・Node-REDのセットアップ
セットアップは公式を参照。
私は、macにもインストールしてmacである程度フローを構築してから、
VPNでJSONでラズベリーパイに渡して組んでいきました。
[https://nodered.jp/docs/user-guide/]
・Hueノードの追加
node-red-contrib-hueplusをインストール
[https://flows.nodered.org/node/node-red-contrib-hueplus]
Bridgeには自分で名前をつけて、編集ボタンをクリック。
BridgeにIPアドレスを入力し、その状態でHueBridge側のリンクボタンを押して、API KEY横のボタンを押すと自動的にAPI keyが割当られる。
・Dashboardノードの追加
node-red-dashboardをインストール
[https://flows.nodered.org/node/node-red-dashboard]
下記のようなダッシュボードが用意されているのを今回は活用。
Hue API
・Hue APIから自宅のID取得
"http://Hue BridgeのIPアドレス/debug/clip.html"
にアクセスするとAPIデバッグ画面を表示。
・Light API
URLに下記を入力し、GETすると下記の様に現在の電球ごとの状態が返される。
/api/APIkey/lights
API keyには先程、Node-REDのhueノード追加した際取得した値を入れる。
"1": {
"state": {
"on": true,
"bri": 254,
"hue": 15648,
"sat": 105,
"effect": "none",
"xy": [
0.4349,
0.4036
],
"ct": 331,
"alert": "lselect",
"colormode": "ct",
"mode": "homeautomation",
"reachable": false
},
"swupdate": {
"state": "noupdates",
"lastinstall": "2021-08-23T05:50:49"
},
"type": "Extended color light",
"name": "Hue color lamp 1",
"modelid": "LCT007",
"manufacturername": "Signify Netherlands B.V.",
"productname": "Hue color lamp",
"capabilities": {
"certified": true,
"control": {
"mindimlevel": 2000,
"maxlumen": 800,
"colorgamuttype": "B",
"colorgamut": [
[
0.675,
0.322
],
[
0.409,
0.518
],
[
0.167,
0.04
]
],
"ct": {
"min": 153,
"max": 500
}
},
"streaming": {
"renderer": true,
"proxy": true
}
},
"config": {
"archetype": "sultanbulb",
"function": "mixed",
"direction": "omnidirectional",
"startup": {
"mode": "custom",
"configured": true,
"customsettings": {
"bri": 254,
"ct": 331
}
}
},
"uniqueid": "00:17:88:01:02:31:38:2f-0b",
"swversion": "67.88.1"
},
"2": {
"state": {
.... 以下省略
・scene API
URLに下記を入力し、GETすると下記の様に現在hueアプリで設定していたシーンが返される。
/api/APIkey/scenes
実際運用上、電球ごとにAPIを叩くことは少ないと思うので、Hueアプリで設定したシーンをAPIで叩くほうが使いやすいと思うので、scenes APIで各シーンの名前をNODEに入れる。
例えば、下記では、HueアプリでRelaxというシーンを組んでいるので、それを呼び出したい場合、
A21E1OATRrZxC1pを入れる。
"A21E1OATRrZxC1p": {
"name": "Relax",
"type": "GroupScene",
"group": "1",
"lights": [
"1",
"6",
"7"
],
"owner": "a5e05d2b-cc6f-4a46-9130-ca0b4f7faa07",
"recycle": false,
"locked": false,
"appdata": {
"version": 1,
"data": "hj5dO_r01_d01"
},
"picture": "",
"image": "a1f7da49-d181-4328-abea-68c9dc4b5416",
"lastupdated": "2021-02-19T08:49:31",
"version": 2
Node-REDでダッシュボード作成
下記のようにリビングに対して、シーンを再生するUIを作成。
各NODEは下記のように設定。
ここでは、scenes APIで記載したシーン名を入力。ここは、Hueアプリで設定したRelaxという名前ではなく、secnesAPIで紐付いた名前を入れる。
この状態でデプロイし、webでアクセスすると下記のUIが表示される。
下記にアクセス。ラズベリーパイは安定性のため、有線LANで常時稼働状態で運用しており、常時再生できるようにしています。
http://Raspberry PiのローカルIPアドレス:1880/ui
API経由で再生するとタイムラグ出るかと思ったけど全然問題ない。
homekitやIFTTTは使いづらかったり、細かい設定がしにくいので、これからダッシュボードにいろんな機能を付加していこうと思います。