SwitchBot
この製品は仕様が公開されている。
https://github.com/OpenWonderLabs/python-host/blob/master/switchbot.py
https://github.com/OpenWonderLabs/python-host/wiki/Meter-BLE-open-API#New_Broadcast_Message
温度湿度計とラズパイを接続する
参考
アプリ-[温湿度計設定]-[デバイス情報]からBLU MACを確認する。
ラズパイからつぎのコマンドでBluetooth機器の一覧を確認する。
$ sudo hcitool lescan
ライブラリを取得
インストール
gitのテキストをみてインストールを行います。
実行
スクリプトが修正されているので、Meterをつけます。
$ sudo python switchbot.py xx:xx:xx:xx:xx:xx Meter Press
しかしながら、コネクションエラーになります。
Usage: "sudo python switchbot.py [mac dev_type cmd]" or "sudo python switchbot.py"
Preparing to connect.
Connection error.
ためした事1
こちらのスクリプトを試す。
https://qiita.com/jksoft/items/5175d6c0b49928c2b214
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 )
a) bluepy
$ sudo pip3 install bluepy
b) MACアドレスを小文字でかく。
引数で入ってくるdev.addrが小文字なので、入力も小文字で与える。とりあえず動いた。機材の正当性は確認できた。 def handleDiscovery( self, dev, isNewDev, isNewData ):
if dev.addr == macaddr:
data = dev.getScanData()
二酸化炭素センサ
NDIR方式が値が正確なセンサ。MH-Z19シリーズが評判よさそう。co2miniもNDIR方式です。
コロナでCo2濃度を測るのがプチブームになっていて、UEDAさんの記事が大本っぽい。
参考
UEDA: https://pypi.org/project/mh-z19/
UEDA 日本語: https://qiita.com/UedaTakeyuki/items/c5226960a7328155635f
片岡氏: https://qiita.com/yukataoka/items/a3b4065e8210b8f372ff
https://qiita.com/kanamekun/items/db27968080a1fcf3ad93
co2mini(二種類あるので注意)
いろいろやったら動いた。crontabからはなぜか動かない。
公式にそって /etc/udev/rules.d/90-co2mini.rules
に、次の内容を保存する。
当該スクリプトを sudo chgrp plugdev 90-co2mini.rules
する
ACTION=="remove", GOTO="co2mini_end"
SUBSYSTEMS=="usb", KERNEL=="hidraw*", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="a052", GROUP="plugdev", MODE="0660", SYMLINK+="co2mini%n", GOTO="co2mini_end"
LABEL="co2mini_end"
再起動する
$ cd /dev/
$ ls -l hi*
crw------- 1 root root 245, 0 Feb 17 15:23 hidraw0
crw------- 1 root root 245, 1 Feb 17 15:23 hidraw1
crw------- 1 root root 245, 2 Feb 17 15:23 hidraw2
crw------- 1 root root 245, 3 Feb 17 15:23 hidraw3
crw-rw---- 1 root plugdev 245, 4 Feb 17 15:28 hidraw4
こうなっていたので、hidraw4に接続していると思う。
スクリプト内を hidraw4にすると動く。
この辺は名称を固定する方法について言及している記事を見た記憶あるので、できると思うが、保留にする。
from CO2Meter import *
from time import sleep
from datetime import datetime
import csv
# CO2meterが認識されているデバイスを設定
sensor = CO2Meter("/dev/hidraw0")
# ちょっと待つ
sleep(8)
# CO2濃度を取得(単位はppm)
data = sensor.get_co2()
# 現在日時と時刻を取得
time = datetime.now()
# ファイル名を作成
filename = time.strftime('/home/pi/co2/co2%y%m%d.csv')
# ファイルに結果を追記
with open(filename, 'a') as f:
writer = csv.writer(f, lineterminator='\n')
row = [time.strftime('%H:%M:%S'),data["co2"]]
writer.writerow(row)
print(row)
co2mini/vfilimono版(大文字、小文字に注意)
sudo apt install libusb-1.0-0-dev libudev-dev
udev
はLINUXのデバイス管理コマンド
hidraw0
これはUSBに接続する順番で変化する。
lsusb
:USBデバイスの一覧と詳細情報を表示する
---------------- オムロン環境センサ-------------------
型番:2JCIE-BU
CO2はVTOC方式(他の指標からの推測値で精度が悪い、NDIRの方が良い)、値が高めにでるようだ。
騒音、気圧、照度あたりが使えそう。
# 参考
デバイスの確認
0590 00d4 を確認する。
pi@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 1a81:1004 Holtek Semiconductor, Inc. Wireless Dongle 2.4 GHZ HT82D40REW
Bus 001 Device 006: ID 0590:00d4 Omron Corp. 2JCIE-BU01
Bus 001 Device 005: ID 0566:3029 Monterey International Corp.
Bus 001 Device 007: ID 0424:7800 Microchip Technology, Inc. (formerly SMSC)
Bus 001 Device 003: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
FTDIのドライバと2JCIE-BUを関連付ける
pi@raspberrypi:~ $ sudo modprobe ftdi_sio
pi@raspberrypi:~ $ sudo sh -c "echo 0590 00d4 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id"
2JCIE-BUを自動認識するように設定
/etc/udev/rules.d/に新しいルールファイルを作って自動認識させる
sudo udevadm control --reload
サンプルプログラム、MITライセンス
GITHUB:https://github.com/omron-devhub/2jciebu-usb-raspberrypi/blob/master/README_ja.md
cd ~/
git clone https://github.com/omron-devhub/2jciebu-usb-raspberrypi.git
cd 2jciebu-usb-raspberrypi/
sudo modprobe ftdi_sio
sudo chmod 777 /sys/bus/usb-serial/drivers/ftdi_sio/new_id
sudo echo 0590 00d4 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
sudo python3 sample_2jciebu.py
項目の説明
Time measured 計測時刻
Temperature 温度 -10~60℃
Relative humidity 湿度 30~85%RH
Ambient light 照度 10~2000lx
Barometric pressure 大気圧 700~1100hPa
Sound noise 騒音 40~94dB
eTVOC 総揮発性有機化学物量相当値 0~29206ppb
eCO2 CO2 濃度相当値
Discomfort index 不快指数
Heat stroke 熱中症警戒度
Vibration information 振動
SI value スペクトル強度
PGA 最大加速度値
Seismic intensity 計測震度相当値
結果
Time measured:2022/03/06 22:56:02
Temperature:26.41
Relative humidity:35.38
Ambient light:178
Barometric pressure:1009.107
Sound noise:66.87
eTVOC:196
eCO2:1536
Discomfort index:71.88
Heat stroke:20.48
Vibration information:0
SI value:0.0
PGA:0.0
Seismic intensity:0.0
Temperature flag:0
Relative humidity flag:0
Ambient light flag:0
Barometric pressure flag:0
Sound noise flag:0
eTVOC flag:0
eCO2 flag:0
Discomfort index flag:0
Heat stroke flag:0
SI value flag:0
PGA flag:0
Seismic intensity flag:0