6
3

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 3 years have passed since last update.

SwitchBot 温湿度計をenebular-agentに繋ぐ(その1)

Last updated at Posted at 2020-12-21

enebular-agentは、Gatewayとしての役割を持ちます。直接、Webに繋がらないデバイスを中継して、IoTシステムを構築することができます。
Bluetooth接続のセンサーをenebular-agentがインストールされているRaspberry Piに繋げて、センサーの値をWebにアップロードするデバイスを作ってみたいと思います。
Bluetooth接続のセンサーはさまざまな種類がありますが、今回はとても安価なSwitchBot 温湿度計を使います。Amazonで2000円ほどで購入できます。

image.png

使用するもの

SwitchBot 温湿度計

なぜ、このセンサーを選んだかと言いますと安価ということもありますが、Bluetooth(BLE)の通信仕様がオフィシャルで公開されています。

そのため、通信仕様を調べる必要はありません。

単体で調べる方法もありますが手間がかかるため、SwitchBotのスマホアプリに接続して、事前にBLEの固有アドレスを調べてます。

image.png

事前準備

センサーとBluetooth通信する部分はPythonのbluepyを使いました。それを事前にインストールします。
通信を簡単にするため、毎回Scanする様にします。bluepyでScanを使用するにはルート権限が必要なため、ルートでbluepyをインストールします。

> sudo pip3 install bluepy

pythonのプログラムは引数でBLEの固有アドレスを指定し、標準出力でJSON型の温度、湿度を出力するようにしました。このプログラムをexecノードで呼び出し、結果を取ります。

sensor.py
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):
          bytedata = binascii.unhexlify( item[2] )
          flag = bytedata[6] & 0x80
          temperature = ( bytedata[6] & 0x7F ) + ( bytedata[5] & 0x0F ) / 10
          if not flag:
            temperature = -temperature
          humidity = bytedata[7] & 0x7F
          print( '{ "temperature": ' + str( temperature ) + ', "humidity": ' + str( humidity ) + ' }' )
          exit()

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

フローの準備

単純にinjectノードで、定期的に呼び出し、debugノードでセンサーの値を確認します。直接、確認するためenebular-agentはenebular editorからリモートモードで接続します。

image.png

execノードの設定は以下のようになってます。

image.png

動作確認

簡単に温度・湿度がjson型で取得できました。

image.png

次回

次はセンサーの値をWebにアップロードしてグラフ化・・というのはありきたりなので、アップロードして、何かと連動させてみたいと思います。

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?