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


家のガレージの遠隔操作に SwitchBotRaspberry PiSORACOM 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 にも掲載してあります。

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