4
7

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.

Inkbird IBS-TH1の値をRaspberryPiでロギング

Last updated at Posted at 2020-05-15

#はじめに
本記事は、Omron環境センサ(BAG型)の記事と同内容を、
低価格なInkbird IBS-TH1
で実施した記事です。
前回使用したminiは電池の持ちが悪かったので、単4電池の本製品で持久性アップを狙いました。

#Inkbirdとは?
様々な家庭用IoTセンサを作っている中国・深圳のメーカーです。
低価格(3000円くらい)でスマホアプリやAPIでのデータ取得等、一通りの機能がそろっている事が魅力です。

今回は、温度+湿度センサ搭載の
Inkbird IBS-TH1
Inkbird_IBS-TH1.jpg

で、ロギングを実施します。

#必要なもの
・RaspberryPi(今回はPi3Model Bを使用)
・Python実行環境(今回はpyenvでPython3.7.6使用)
・Inkbird IBS-TH1(プローブを外した状態で使用しています)

#手順
①RaspberryPiとセンサのBluetooth接続確認
②センサの測定値をPythonで取得
③PythonからGASのAPIを叩いてスプレッドシートにデータ書き込み
④スクリプトの定期実行

こちらを参考にさせて頂きました。
https://qiita.com/bon_dentetsu/items/87ed6c65640b5ba11e5c
https://github.com/viyh/inkbird
https://github.com/sputnikdev/eclipse-smarthome-bluetooth-binding/issues/60

##①RaspberrypiとセンサのBluetooth接続確認
###センサの認識確認
・センサのセットアップ
センサに単4電池をセットします(蓋が取りずらいので注意してください)

・Bluetooth機器のスキャン
RaspberryPiで下記コマンドを実行

sudo hcitool lescan
LE Scan ...
AA:CC:EE:DD:55:77 sps

というように、「sps」という名前がでてきたら、これがセンサのMACアドレスです。
出てこなければ電池の接触やRaspberryPiのBluetooth有効を確認してください。
機種や設定によっては名前が「sps」ではないのかもしれないので、
その場合Inkbirdの公式アプリでMACアドレスを確認できます。

##②センサの測定値をPythonで取得
###bluepyでの認識確認
bluepyは、PythonでBluetooth Low Energy(BLE)にアクセスするためのライブラリです(クラス定義

・必要なパッケージのインストール
下記をインストールします

sudo install libglib2.0-dev

・bluepyのインストール

下記コマンドでpipでインストールします

pip install bluepy

・bluepyに権限を付与
スキャンにはbluepyにSudo権限を与える必要があります。

bluepyのインストールされているフォルダに移動し、

cd ~.pyenv/versions/3.7.6/lib/python3.7/site-packages/bluepy

※上記は、pyenvでPython3.7.6をインストールした場合。
環境により場所は異なるので注意

下記コマンドでbluepy-helperにSudo権限を付与する

sudo setcap 'cap_net_raw,cap_net_admin+eip' bluepy-helper

###センサ値取得スクリプトの作成
センサ値取得のため、下記のスクリプトを作成します

inkbird_ibsth1_connect.py
from bluepy import btle
import struct

def get_ibsth1_data(macaddr):
    peripheral = btle.Peripheral(macaddr)
    characteristic = peripheral.readCharacteristic(0x28)
    (temp, humid, unknown1, unknown2, unknown3) = struct.unpack('<hhBBB', characteristic)
    sensorValue = {
            'Temperature': temp / 100,
            'Humidity': humid / 100,
            'unknown1': unknown1,
            'unknown2': unknown2,
            'unknown3': unknown3,
        }
    return sensorValue

Inkbird IBS-TH1 miniではハンドルが「0x002d」でしたが、今回は「0x28」なので注意してください。
bluepyのPeripheralクラスによる通信でデータを取得します。

なお、取得したcharacteristicデータは
・1~2バイト目:温度(0.01℃単位)
・3~4バイト目:湿度(0.01%単位)
ですが、5~7バイト目の内容が調べてもわからなかったので、
unknown1~3としてロギングして、正体を探ろうと思います。
(電池残量が取得できる事を目論んでいます)

###メインスクリプトの作成
センサ値取得スクリプトを呼び出すため、メインスクリプトを作成します

inkbird_toSpreadSheet.py
from bluepy import btle
import inkbird_ibsth1_connect

######オムロン環境センサ(BAG型)の値取得######
PERIPHERAL_MAC_ADDRESS = '①で取得したMACアドレス'
sensorValue = inkbird_ibsth1_connect.get_ibsth1_data(PERIPHERAL_MAC_ADDRESS)

#試しに温度を表示
print(sensorValue['Temperature'])

コンソールから実行してみます

python inkbird_toSpreadSheet.py
25.49

これで、Pythonでセンサ測定値を取得することができました。

##③PythonからGASのAPIを叩いてスプレッドシートにデータ書き込み
オムロン環境センサの記事ご参照ください

##④スクリプトの定期実行
オムロン環境センサの記事ご参照ください

4
7
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
4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?