#はじめに
本記事は、Omron環境センサ(BAG型)の記事と同内容を、
低価格なInkbird IBS-TH1 miniで実施した記事です。
#Inkbirdとは?
様々な家庭用IoTセンサを作っている中国・深圳のメーカーです。
低価格(3000円くらい)でスマホアプリやAPIでのデータ取得等、一通りの機能がそろっている事が魅力です。
今回は、温度+湿度センサ搭載の
Inkbird IBS-TH1 mini
で、ロギングを実施します。
#必要なもの
・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
###センサ値取得スクリプトの作成
センサ値取得のため、下記のスクリプトを作成します
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としてロギングして、正体を探ろうと思います。
(電池残量が取得できる事を目論んでいます)
###メインスクリプトの作成
センサ値取得スクリプトを呼び出すため、メインスクリプトを作成します
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センサマンと化してますが、飽きずに続けていきます!笑)