LoginSignup
9
12

More than 1 year has passed since last update.

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

Last updated at Posted at 2020-05-09

#はじめに
本記事は、Omron環境センサ(BAG型)の記事と同内容を、
低価格なInkbird IBS-TH1 mini
で実施した記事です。

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

今回は、温度+湿度センサ搭載の
Inkbird IBS-TH1 mini
Inkbird_mini.jpg
で、ロギングを実施します。

#必要なもの
・RaspberryPi(今回はPi3Model Bを使用)
・Python実行環境(今回はpyenvでPython3.7.6使用)
・Inkbird IBS-TH1 mini

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

こちらを参考にさせて頂きました。
https://qiita.com/bon_dentetsu/items/87ed6c65640b5ba11e5c
https://qiita.com/junara/items/f396c1c4c15c78cde89f

##①RaspberrypiとセンサのBluetooth接続確認
###センサの認識確認
・センサのセットアップ
センサに付属のボタン電池をセットします。

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

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

というように、「sps」という名前がでてきたら、これが環境センサのMACアドレスです。
出てこなければUSBの接触や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_mini_data(macaddr):
    peripheral = btle.Peripheral(macaddr)
    characteristic = peripheral.readCharacteristic(0x002d)
    (temp, humid, unknown1, unknown2, unknown3) = struct.unpack('<hhBBB', characteristic)
    sensorValue = {
            'Temperature': temp / 100,
            'Humidity': humid / 100,
            'unknown1': unknown1,
            'unknown2': unknown2,
            'unknown3': unknown3,
        }
    return sensorValue

本センサは、オムロン環境センサUSB版と同様コネクトモードで接続します。
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_mini_data(PERIPHERAL_MAC_ADDRESS)

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

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

python inkbird_toSpreadSheet.py
25.49

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

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

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

#追記
なお、本製品は**電池の減りが早く**、一ヵ月程度で切れてしまうそうなので、
少しサイズアップするけれども電池の持ちの良いIBS-TH1を、次に試してみようと思います。

(Bluetoothセンサマンと化してますが、飽きずに続けていきます!笑)

9
12
1

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