###### 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
```