Switch Bot Color Bulbをテンキーで操作するよ
💭 テンキーで部屋の明かりを操作したい
SwitchBotのスマート電球はSiriなどで操作できますが、急いでいるときは言うまでもなく非常に不便です。
純正のリモートボタンも別売りであるのですが、2パターンしか操作することができません。
テンキーで操作できたらいいなと思い作りました。
構成
-
スイッチとなるモノ
- ミニキー
- BUFFALO BSTK100WH
-
サーバ
- Proxmoxにて作成したVM (Debian GNU/Linux 12)
-
API
-
動かすモノ
🛠 準備をしよう
スイッチとなるモノ
本体に割り当て保存可能なミニキー
急いでいる時に操作を素早くしたい用に。部屋の入り口付近に設置します。
ちなみにキースイッチは自由に取り外せるので、余っているルブ済みのキーに取り替えました。
かわいいね。
BUFFALO BSTK100WH
サーバ
LXC (Linux Container) にしようかと思いましたが、
どうやってもUSBパススルーがうまく設定できないので、
おとなしくDebianのVMを立てることにします。割り当ては1CPUの512MBで問題ありません。
USBパススルー
VMを作成したらWebGUIからUSBパススルーの設定を行います。
当該VM
→ ハードウェア
→ 追加
→ USBデバイス
→ USBポートを使用
→ プルダウンからUSB機器を選択する
自動ログインを有効化
もしVMがシャットダウンされたら起動時に手動でログインする必要があるため
TTY1の設定をいじくります。
sudo mkdir /etc/systemd/system/getty@tty1.service.d
sudo nano /etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin {user name} --noclear %I $TERM
sudo reboot
Pythonスクリプト
git cloneしてください。
必要な外部ライブラリを纏めたrequirements.txtも入ってます。
venv
python3 -m venv venv
pip install -r requirements.txt
. venv/bin/activate
上記の工程を行うと、
必要な外部ライブラリをインストールした状態の仮想環境に入ることができます。
get_data.py
実行するとトークンを求められます。
成功するとdeviceID, SceneIDを取得し、jsonで保存します。
ctrl_scene.py
テンキーから入力があれば、API経由でシーンを制御します。
main関数に、お好みのキー割り当てとSceneIDを入力してください。
~/.zshrc
シェルを起動したら自動でPythonスクリプトを実行するようにします。
cd Control-SwitchBot
. venv/bin/activate
python3 ctrl_scene.py
✅ 試してみよう
一旦、ログアウトしてみてください。
そうすると自動でログインされ、スクリプトを実行していると思います。
そこで割り当てたキーを入力するとBulbを制御できます。
これを応用すれば他のSwitchBot製品もテンキーから操作できるね。
🔖 参考
Discussion