5
9

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 1 year has passed since last update.

昨年のアドベントカレンダーでSwitchbotの温湿度計をenebular-agentに繋ぐというのを試してみましたが、SwitchbotのセンサーやBotは様々な種類が販売されているので、他にも試してみました。

image.png
SwitchBotの人感センサーとドア開閉センサー、スイッチを押すためのボット、スマート加湿器です。Raspberry PiとBluetoothで接続することができます。

準備

まず、準備としてBluetoothをPythonで扱うためのモジュールをインストールします。

$ sudo apt install -y python3-pip
$ sudo apt install -y python-dev libbluetooth3-dev
$ sudo pip3 install pybluez
$ sudo apt install -y libglib2.0 libboost-python-dev libboost-thread-dev
$ sudo pip3 install gattlib
$ sudo pip3 install bluepy

人感センサーとドア開閉センサーは以下のPythonプログラムで値を取得します。引数でBLEの固有アドレスを指定します。Switchbotのセンサーは事前にスマホアプリから設定を行い、BLEの固有アドレスを取得しておきます。

import sys
import binascii
from bluepy.btle import Scanner, DefaultDelegate

macaddr = ''

class ScanDelegate( DefaultDelegate ):
  def __init__( self ):
    DefaultDelegate.__init__( self )

  def handleDiscovery( self, dev, isNewDev, isNewData ):
    if dev.addr == macaddr:
      data = dev.getScanData()
      for item in data:
        if(item[0] == 22):
          door = "false"
          light = "false"
          pir = "false"
          bytedata = binascii.unhexlify( item[2] )
          if( bytedata[3] & 0x40 ): pir = "true"
          if( bytedata[5] & 0x02 ): door = "true"
          if( bytedata[5] & 0x01 ): light = "true"

          print( '{ "pir": ' + str( pir ) + ', "door": ' + str( door ) + ', "light": ' + str( light ) + ' }' )
          exit()

macaddr = sys.argv[1]
scanner = Scanner().withDelegate( ScanDelegate() )
scanner.scan( 0 )

人感センサーもドア開閉センサーも光センサーが内蔵されていて、その値も取得できます。出力はJSONで出力するようにしています。

次にSwitchbotのボットを動かすプログラムを用意します。こちらは、Switchbotオフィシャルが用意しているプログラムを使用しました。

$ sudo apt install -y git
$ git clone https://github.com/OpenWonderLabs/python-host.git

上記を実施し、引数にBLEの固有アドレスと動作を指定すると動きました。

$ sudo python3 switchbot_py3.py --device XX:XX:XX:xx:xx:xx Press

enebular-agentで動作させる

簡単に値を取得するフローを作って確認してみました。

image.png

debugノードでセンサーから取得された値が確認できました。

(本記事は、書き途中です。動作確認しながら書き上げていきます。)

5
9
0

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
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?