6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-08-10

家のガレージの遠隔操作に 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 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

6
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?