# ms公開教室 前段階 -Philips Hue 実践編-
## 要件定義/実装機能
- 課題
BMIからどんな信号が来てどう変換すればいいのかやっぱりわかってない
自動で光の色を変化させるにはforで回せばいいかな?
(線電球でカカポしたい)
- Hue側のパラメータ
光の強さ、色、(つけるか消すか)
点滅の頻度とか?
サチュレーションってなんだ(振り切れ状態?←彩度でした)
- 案
C3を光の強度、C4を色に振り分ける
最悪念じたら光ればいいんじゃないですかね(色はランダム、おみくじみたいな感じで)
じゃんけん?VRに対抗できるくらい面白いことできるようにしたい
## 方法1
管理画面
```
http://[hueのIPアドレス]/debug/clip.html
```
から叩いてみる。
### とりあえずやってみる:初期設定
1. 公式アプリをダウンロード
2. ブリッジを電源とwi-fiルータに接続する
3. 電球を繋いで電気が通った状態にする
4. ブリッジのIPアドレスを確認する(公式アプリ→設定→Hueブリッジ)
このとき、wi-fiが同じ(5Gかどうかまで)ものに接続していないと認識されない
> 192.168.0.28 とか
5. ```http://[hueのIPアドレス]/debug/clip.html```に代入してhttpバーにいれる
6. うまくいけばこんな画面になる
7. authorizeする必要があるのでする;
(していないと404エラー)
7.1 ```URL > /api```
7.2 ```BODY > {"devicetype":"my_hue_app#<username>"}```
7.3 POST
7.4 これをbridgeのボタンを押して10秒?以内に実行
(ボタンを押していないと101エラー)
8. usernameがランダム生成されて返ってくる
e.g. "UTeHF6t1OKT8tonqXwuzrVYIjKSZmHPeugLEpoan"
[参考資料:初期設定](https://www.lanches.co.jp/blog/2021#:~:text=hue%E3%81%AEIP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%A3,IP%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82)
[参考資料:authentication](https://developers.meethue.com/develop/get-started-2/)
ということで、通信が可能になった。
### とりあえず遊んでみる
ライトの情報を得てみよう。ここからは[公式docs](https://developers.meethue.com/develop/hue-api/lights-api/)を参考にすればなんの問題もない
まず現在のライトの状況を見てみる。
```
URL> /api/UTeHF6t1OKT8tonqXwuzrVYIjKSZmHPeugLEpoan/lights
GET
```
```
{
<略>
"2": {
"state": {
"on": true,
"bri": 76,
"hue": 8417,
"sat": 140,
"effect": "none",
"xy": [
0.4574,
0.41
],
"ct": 366,
"alert": "none",
"colormode": "ct",
"mode": "homeautomation",
"reachable": true
},
<略>
"type": "Extended color light",
"name": "線電球",
<略>
"capabilities": {
"certified": true,
"control": {
"mindimlevel": 40,
"maxlumen": 1600,
"colorgamuttype": "C",
"colorgamut": [
[
0.6915,
0.3083
],
[
0.17,
0.7
],
[
0.1532,
0.0475
]
],
"ct": {
"min": 153,
"max": 500
}
},
"streaming": {
"renderer": true,
"proxy": true
}
},
"config": {
"archetype": "huelightstrip",
"function": "mixed",
"direction": "omnidirectional",
"startup": {
"mode": "custom",
"configured": true,
"customsettings": {
"bri": 76,
"ct": 366
}
}
},
"uniqueid": "00:17:88:01:09:49:75:a9-0b",
"swversion": "1.76.11",
"swconfigid": "B757566F",
"productid": "Philips-LCL001-1-LedStripsv4"
}
}
```
激長返信。~メンヘラか?~
ということで現在登録されている電球たちの様子を知ることができる。各変数の説明は[こちらの1.4](https://developers.meethue.com/develop/hue-api/lights-api/)参照。ただこれは本当に全ての情報で見るのもうんざりするので、何を知りたいのかによってもっと細かく指定するべきだろう。
次に、電球の名前を設定した方がいいだろう。ただし今回はアプリですでに設定してしまったので省略。[こちらの1.5](https://developers.meethue.com/develop/hue-api/lights-api/)参照。かんたんやね。
次にこちらから今光っている線電球の明るさや色を指定してみる。[こちらの1.6](https://developers.meethue.com/develop/hue-api/lights-api/)参照。
現在は線電球を黄色っぽく弱い光で光らせている:
```
{
"bri": 76,
"hue": 8417,
"sat": 140,
"effect": "none",
"xy": [
0.4574,
0.41
],
"ct": 366
}
```
ので、せっかくなのでどぎつい青でめっちゃ光らせてみることにする
事前に公式アプリで光を変更して、GETで数値をみてみたものを代入していく
```
URL> /api/<username>/lights/<id: 1とか2とか>/state
```
```
BODY>
{
"bri": 254,
"hue": 43161,
"sat": 254,
"effect": "none",
"xy": [
0.1563,
0.1672
],
"ct": 153,
"colormode": "xy"
}
```
これをPUT
なんということでしょう。優しく部屋を照らしていたライトが目に親を殺されたかのような変貌を遂げたではありませんか。
/stateを忘れないように(1敗)
あと筆者のようにjson慣れていない民は[JSON Pretty Linter](https://lab.syncer.jp/Tool/JSON-Viewer/)を使うといい感じに整形してくれる
ということで管理画面からの制御に成功したのであった。めでたしめでたし。
> ※注意
> - 線電球の方は接触の問題で通信ができていても光らないことがある。事前に光らせておいて色を変えるなどが無難
> - "on"項目がfalseになっている=電球がオフだと色などの変化を受け付けずにtype6のエラーとなる
## 方法2
pythonのコードを作成して叩く。
1. [requests](https://requests-docs-ja.readthedocs.io/en/latest/),[phue](https://github.com/studioimaginaire/phue)をダウンロード