2022年2月5日土曜日

Hue Bridge V2 API (Phirips Hue Lamp)

HueのREST API V2を使う

 我が家では、照明コントロールにHueのブリッジを複数使って、家中のライトをコントロールしているのだ

 SiriでもAlexaでもコントロールできるので楽ちん


アプリ使えば?

 はい、前はそれで十分でした。使いやすいGUIアプリだったし

 ところがiOS13あたりから改悪されて、アプリケーションは長時間起動し続ける事ができなくなったのだ!アリエン
 寝る前に30分だけタイマーして電気を徐々に暗くしていただけどそれができなくなった

 ムキー

 iOSのショートカットを作ってもiPadがスリープすると「ショートカットアプリ」自体がkill processされちゃう。iOS 裏アプリは5秒しか動けない制限。

 つまり「スクリプト」をアラームにしても「アラームアプリ」までは目覚ましの機能で起動するんだけど、その後「ショートカットアプリ」がすでに死んでるんでその先の「Hueの照明を消す」に進まない。
 「アラームアプリ」はスーパースペシャルで、「ショートカット」なんて新参者にはあまり権限がないようだ
 しかたない、自作するか


やれやれどっこいしょ

 V1 APIとV2 APIがあるんだけど、V1は古いAPIなので、もうじきなくなるよ、と脅し文句がAPIリファレンスに書いてあるけど、告知されてから早10年以上たってる気がする

 家電なので10年や20年は使うから、そうそう無くせないよね

 またV1じゃないとできない機能があるらしい。はよ解決しろ

V1 API

http://192.168.0.127/debug/clip.html

 httpでもアクセスできるよ、いいんかい。確か初代のブリッジはCPUとメモリがしょぼすぎて httpしかできなかったのでAppleのHomeに公式登録する事ができなかったんだよな

 初代ブリッジはhttpsの実装ができないので、新しくブリッジに買い直したんだよ

 1万円近かったよ

 海外は初代ブリッジ下取りするサービスがあるんだけど、日本のサポートに問い合わせたら

「そんなサービスの予定はありません、フヒヒ」

と言われてがっかりした

 フヒヒは言ってなかった気がする


V2 API

前準備

まずはブリッジのDHCPのアドレスが必要なのだ

Hueブリッジは勝手にインターネットにつないでくれてちゃって


https://discovery.meethue.com/


にブラウザでアクセスするとどういう仕組みなんだか、自宅のブリッジが全部出てくる

[{"id":"002992aaae7ee5c3","internalipaddress":"192,168.0.115","port":443},{"id":"00354ffe299d29","internalipaddress":"192.168.0.127","port":443}]

うむ、怖いww

まぁルーターのDHCPリストとmacアドレスを老眼で突き合わせてショボショボ IPを探すよりは楽なんだけど

このidはいつ使うのかな。自分のアプリでブリッジを見分ける時に使うのかも

複数のルーターを使っている人は知識あるから説明は不要でしょう

postmanなるツールを使うなら、SETTINGSの

Headers 項目

  1. Send no-cache header をon

  2. Send Postman Token Headerをon

  3. Trim keys and values in requst body をoff

  4. SSL certificate verification を off. (俺俺証明書だから)

としときなさいよ、と

ハイカラなGUIが不得意な8bitおじさんなのでcurlで作業するのじゃ、ヨボボ

1は  -H 'Cache-Control: no-cache'

2と3は無視

4は -k をくっつけとけばよさそうじゃのぅ

ブリッジにIDを作る

まずREST APIをアクセスできるように、ブリッジに適当な名前で「アプリ#ユーザー名」の登録をする

urlを /api

Message Body の中に

{"devicetype":"my_app#mydebug"}

とか入れる。

my_app が 今回決めたアプリケーション名(適当)で、

mydebugがそのアプリのユーザー名という事らしい

何個作れるんですかね


curl -X POST -H 'Cache-Control: no-cache' -k "https://192.168.0.127/api" --data '{"devicetype":"my_app#mydebug", "generateclientkey":true}'

を送信すると

[{"error":{"type":101,"address":"","description":"link button not pressed"}}]

hueブリッジのボタンを押せ、とな。押入れまで歩いて一回だけポチする

30秒くらいでこの呪文の効果が切れるらしいのでダッシュで戻り、さっきのcurlをもう一度たたくと

[{"success":{"username":"LuY7AOkGozQTotCstgya28EUddfYpSflIr-CCPc","clientkey":"007E618660B3464232C29946A01CE3DF"}}]

なんか手に入ったっぽい!

これ何人くらい登録できるんすかね。ブリッジのメモリーなんてたかが知れてるし

で、このusernameをヘッダーにくっつけとくとGETができるようだ

返ってくるのが一本グソのjsonなので jq で整形する

# brewはおググりください
% brew install jq

usernameはさっき手に入れてたので、-H "hue-application-key: LuY7AOkGozQTotCstgya28EUddfYpSflIr-CCPc"をくっつけて、/clip/v2/resource/device のリクエスト

curl -H 'Cache-Control: no-cache' -k "https://192,168.0.127/clip/v2/resource/device" -H "hue-application-key:LuY7AOkGozQTotCstgya28EUddfYpSflIr-CCPc" | jq

でっかいjsonキター

このjsonはランプのuuidとか入ってて、これがバレると外からアクセスできちゃうからhueの画面を貼っとく







APIの一覧

ユーザー登録すると、以下のurlでapi一覧を見る事ができる

https://developers.meethue.com/develop/hue-api-v2/


よし、これを使って30分で消えるタイマーをRaspberyy PIで作るぞ

今年度中には