###### tags: `raspberrypi` `switchbot` # Raspberry Pi 4 から BLE で Switchbot Bot を動作させる [Home Assistant で Switchbot Bot を動作させる](https://hackmd.io/@yuzuafro/switchbot-homeassistant) では、Rapsberry Pi 4 上に作成した Home Assistant サーバを使用して、Switchbot Bot を動作させました。 ただ、こんなリッチな UI や仕組みは必要ないので、もう少しシンプルにコマンドだけ叩く方法を調べてみました。 ## やりたいこと - Raspberry Pi 4 に作成した Python プログラムから BLE 通信を行い、Switchbot Bot のボタン押下処理を実行する。 ``` # (イメージ) # python3 お風呂自動ボタンコマンド.py ``` - Switchbot Bot が動作して、自動ボタンが押下される。 <img src="https://i.imgur.com/ys4Myzs.jpg" width="300px"> ## 準備するもの - Switchbot Bot - Raspberry Pi 4 - 8 GB RAM - Ubuntu 20.04 (64bit) ``` $ uname -a Linux *****-pi4-8gb-1 5.4.0-1042-raspi #46-Ubuntu SMP PREEMPT Fri Jul 30 00:35:40 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux ``` ## 公式ドキュメント Switchbot の製造元がソースコードを公開しています。 - https://github.com/OpenWonderLabs Raspberry Pi 向けのソースコードも `python-host` プロジェクトに公開されています。 - https://github.com/OpenWonderLabs/python-host - switchbot.py の `trigger_device` の中を見ると、`570100` が Press コマンドだということがわかります。 ```python def trigger_device(device): ... if dev_type == 'Bot': if act == 'Turn On': con.sendline('char-write-cmd ' + cmd_handle + ' 570101') elif act == 'Turn Off': con.sendline('char-write-cmd ' + cmd_handle + ' 570102') elif act == 'Press': con.sendline('char-write-cmd ' + cmd_handle + ' 570100') elif act == 'Down': con.sendline('char-write-cmd ' + cmd_handle + ' 570103') elif act == 'Up': con.sendline('char-write-cmd ' + cmd_handle + ' 570104') ... ``` ## 動作したソースコード 色々試してみて、うまくいかなかったのですが、Qiita のこちらの記事を参考にさせていただいたところ、動作できるようになりました。 - SwitchBotをWindows 10 から制御する https://qiita.com/hiratarich/items/00be23735ac6001ff74b こちらの記事の switchBot.py がそのまま使用できました。 ``` # python3 ./switchBot.py -d C8:6B:EA:XX:XX:XX ```