7月からクラファンで購入した分割キーボードの Jiffy75 を使っている。この分割キーボードには左右にロータリーエンコーダー(くるくる回すやつ)がついていて、物理的なデバイスで PC の音量変更などができる。
この Jiffy75 のロータリーエンコーダーを使って、SwitchBot のスマート電球を点灯/消灯・増光/減光できるようにした。
従来の課題
仕事部屋では SwitchBot E26 というスマート電球を使っている。
SwitchBot のスマート電球はハブに繋がなくても Wi-Fi や Bluetooth 経由で操作ができる。元々は Alexa 経由での音声操作や、SwitchBot のクラウド API 経由で StreamDeck から操作していたが、API 経由では操作してからスマート電球に反映されるまで数秒かかっていた。
部屋を明るくするのにタイムラグがあると、壁にあるスイッチで備え付けの電球を点けたほうが早いじゃんとなる。真夜中では尚更。スマート電球のタイムラグは致命的だ。
それでもスマート電球を使うのはスマート電球は光量や色温度を変えられるからで、夜に作業をするときには暖色系の微かな光が目にも心にも優しいから。
スマート電球を使いたいのに操作にタイムラグがある、これが一番の課題だった。
Home Assistant でスマート電球を操作
クラウド API を使うとタイムラグが発生するので直接操作すればラグを短くできそう。
スマート電球は Wi-Fi で LAN に接続できるけど、それだとクラウド API でしか操作できず、Bluetooth 経由だと直接操作できる仕様だった。
Matter over Wi-Fi ってのに対応してくれれば Wi-Fi でも直接スマート電球を操作できるようになるらしい。スマートホームを突き詰めれば Matter over Wi-Fi サポートのデバイスで固めるのが良さそうだけど、今はスマート電球くらいなので買い替えまではしない。
というわけで Bluetooth 経由でスマート電球を操作したいのだが、PC から直接スマート電球に Bluetooth で繋ぐのもいいけど、複数 PC を使い分けてるので PC とスマート電球の Bluetooth 接続は避けて、PC とスマート電球の間にラズパイを挟むことにした。
ラズパイには Home Assistant というスマートホーム関連のデバイスを統合管理できるプラットフォームを入れた。
Home Assistant を使うと Bluetooth 接続したスマート電球を Home Assistant の API 経由で操作できるようになる。
ラズパイ向けの Home Assistant OS イメージもあるけど、すでに動かしている Flightradar24 アンテナ用のラズパイに Home Assistant コンテナを同居させることにした。
Home Assistant を入れたら GUI でラズパイからスマート電球に接続するように設定。この状態でもブラウザからスマート電球を操作できるので試しにスマート電球を操作してみると、クラウド API とは比較にならないほど反応がよくなった。さすがにラグ無しってのは無理だけど、十分許容できる範囲。
この Home Assistant API を Jiffy75 のロータリーエンコーダーから叩けるようにする。
キーボードから API 実行
分割キーボード Jiffy75 のロータリーエンコーダーから Home Assistant API を実行するには Hammerspoon を使う。Hammerspoon は macOS を Lua で自動化できるオープンソースのツール。
特定のキーが入力されたらスマート電球の点灯/消灯、増光/減光する操作を Home Assistant API 経由で実行する Hammerspoon のスクリプトを用意した。正直 Lua の書き方も分からないけど、バイブコーディングでちゃんと動くものはできたのでヨシ。Hammerspoon は PC に常駐させる。
あとは Jiffy75 のロータリーエンコーダーからその特定のキーを送ればいい。Jiffy75 と PC を有線接続して JZFHUB からキーマップを変更する。ロータリーエンコーダーの左回転に F16、右回転に F17、押下に F18 を割り当てた。
左回転で減光、右回転で増光、押下で点灯/消灯に対応させている。
X で投稿を見る
無事に分割キーボードからスマート電球を操作できるようになった。細かいところを目を瞑れば今のところ操作性に問題はない。あとは AI とチューニングしていけばいい。
残る問題としては、PC がロック状態のときは分割キーボードから操作ができないこと。引き続き Alexa からも操作できる状態なのでなんとかなってるけど、Home Assistant API を叩ける物理的なスイッチが欲しいところ。