家のガレージの遠隔操作に SwitchBot と Raspberry Pi と SORACOM Air for セルラー を組み合わせて、「どこでもボタンを押してくれるロボット」を使うようにしました。
構成
Raspberry Pi に SSH ログインして SwitchBot を操作しています。
- SwitchBot: ボタンを押すロボット、BLE で動作する。
- Raspberry Pi: シングルボードコンピューター、Linux ベースの OS (Raspbian) が動く
以下3つはオプションです (Wi-Fi で動かす場合は不要)
- AK-020: USB ドングル型 3G モデム
- SORACOM Air for セルラー: IoT 向けセルラー通信サービス (今回は plan-D という日本国内/NTT docomo回線を利用するサブスクリプションを利用)
- SORACOM Napter: セルラー通信をしているデバイスに対してセキュアなグローバル IP アドレスを割り当てるサービス
SORACOM Air を使うことで、Wi-Fi などの環境が無くてもインターネットに接続できますし、SORACOM Napter で安全なグローバル IP アドレスの払い出しを受けることができます。
実際の作業
Raspberry Pi
Raspbian は Raspbian Buster Lite (July 2019) を使用。
ライブラリのセットアップ
$ sudo apt install -y python3-dev python3-pip
$ sudo pip3 install --upgrade pip
$ sudo pip install bluepy
AK-020 および SORACOM Air を使ってインターネット接続したい場合は、以下を追加で実行します。
$ curl https://soracom-files.s3.amazonaws.com/setup_air.sh | sudo bash -
switchbot.py
同じものを gist にも掲載してあります。
※ on
と off
は未実装です (とりあえず press
だけ実装しました)
#!/usr/bin/env python3
import binascii
from bluepy.btle import Peripheral
class SwitchBot:
def __init__(self, mac_address):
self.p = Peripheral(mac_address, "random")
hand_service = self.p.getServiceByUUID("cba20d00-224d-11e6-9fb8-0002a5d5c51b")
self.hand = hand_service.getCharacteristics("cba20002-224d-11e6-9fb8-0002a5d5c51b")[0]
def press(self):
self.hand.write(binascii.a2b_hex("570100"))
self.p.disconnect()
def on(self):
self.p.disconnect()
raise NotImplementedError()
def off(self):
self.p.disconnect()
raise NotImplementedError()
if __name__ == "__main__":
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-a", "--address", dest="addr", help="MAC address of SwitchBot")
parser.add_option("-c", "--command", dest="cmd", help="Command for SwitchBot (press|on|off)")
(options, args) = parser.parse_args()
getattr(SwitchBot(options.addr), options.cmd)()
$ python3 switch_bot.py -a XX:XX:XX:XX:XX:XX -c press
※ XX:XX:XX:XX:XX:XX
は SwtichBot の MAC アドレスです。
SwitchBot の MAC アドレスの見つけ方
$ sudo hcitool lescan
で表示される MAC アドレス一覧を基に switch_bot.py
を実行してみてください。
SORACOM Napter
SORACOM Napter を使って SSH ログインする方法は https://dev.soracom.io/jp/start/napter_ssh/ に掲載されています。
あとがき
いままでは MicroBot Push を用いてガレージのリモート開け閉め※1 をやってましたが、2019年7月くらいから MicroBot Push と IFTTT の連携が終了(?)してしまい、動かなくなってしまいました。
MicroBot Push を遠隔で動かす仕組みに Prota Pi を使っていたのですが、それも2019年の2月くらいには動きがあったようで、結論はスマホとか使ってな!という状況のようです。
なので SwitchBot 君に引っ越したという経緯。
※1 Wio LTE君とSORACOM Beamで「だっしゅぼたん」を作る
このあと。
MQTT を使って、SORACOM LTE-M Button との連携で遠隔ガレージ操作を実現する予定です。
参考資料
EoT