Edited at

SwitchBot / Raspberry Pi / SORACOM Air for セルラーで「どこでもボタンを押してくれるロボット」

家のガレージの遠隔操作に SwitchBotRaspberry PiSORACOM Air for セルラー を組み合わせて、「どこでもボタンを押してくれるロボット」を使うようにしました。


構成

Raspberry Pi に SSH ログインして SwitchBot を操作しています。

SwitchBot / Raspberry Pi / SORACOM Air for セルラーで「どこでもボタンを押してくれるロボット」 / overview



  • 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 instal -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 にも掲載してあります。

onoff は未実装です (とりあえず press だけ実装しました)


switchbot.py

#!/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