AliExpressに注文していた
XIAOMIの湿度計がやっと届いた。
8月16日に注文していたので5.5週ぐらいで
届いたことになる。
価格は4個で1,229円。1個あたり306円と激安。
コンパクトで可愛いデザイン。
電池の絶縁テープを抜くと
すぐに温度と湿度が表示された。
裏蓋を外し内部を確認。
電池はCR2032。
MOYASHI氏のフィラメントケースの
ホルダーにバッチリはまって気持ちが良い。
|
|
|
4つで 1,229円 |
電池はCR2032 |
固定用両面テープ付属 |
データを取得するプログラム
アプリでアクセスできるらしいのだが、
どうせアプリでは使わないので
MOYASHI氏のブログで紹介されている
JsBergbau/MiTemperature2: Read the values of the Xiaomi Mi Bluetooth Temperature sensor 2を試す。
Python3.7以上が必要ということで、
自分のLinux機はPython3.5.3だったので
ソースをダウンロードし 3.7.9をインストール。
LYWSD03MMC.pyをダウンロードし
動かすと
usageが表示された。
これを読んで以下のことがわかった。
- デバイスのMACアドレスを指定する必要がある
-c
で回数を指定しないと永遠にデータを表示し続ける
-call
でデータ取得時に外部プログラムを起動可能
- データ補正機能が充実。湿度データがあまり信用されていない?
MACアドレスの取得
bluetoothについて詳しくないのだが、
湿度計のMACアドレスは以下のbluetoothctlコマンドを実行し、
scan onと入力することで取得できた。
LYWSD03MMC がXIAOMIの湿度計らしい。
$ bluetoothctl
[NEW] Controller 00:1B:DC:03:9F:EC hslpc24 [default]
[NEW] Device B0:99:28:A4:55:D2 F-PLUG_001BDC039FEC
[bluetooth]# scan on
Discovery started
[NEW] Device 51:64:82:65:03:9D 51-64-82-65-03-9D
[NEW] Device 57:FC:16:D4:63:DB 57-FC-16-D4-63-DB
[NEW] Device A4:C1:38:91:79:3F LYWSD03MMC
[NEW] Device A4:C1:38:79:5E:67 LYWSD03MMC
[NEW] Device A4:C1:38:1F:EB:AB LYWSD03MMC
[NEW] Device A4:C1:38:BC:11:D9 LYWSD03MMC
[CHG] Device 51:64:82:65:03:9D RSSI: -59
[CHG] Device A4:C1:38:79:5E:67 RSSI: -62
[CHG] Device 51:64:82:65:03:9D RSSI: -76
[CHG] Device A4:C1:38:1F:EB:AB RSSI: -71
[bluetooth]# quit
[DEL] Controller 00:1B:DC:03:9F:EC hslpc24 [default]
$
callbackプログラムの引数
-call
で与えるプログラムに
渡される引数を確認するため、引数を
表示するだけのプログラムで動かしてみる。
$ cat callback.py
#!/usr/local/bin/python3
import sys
print(sys.argv)
$ python3 ./LYWSD03MMC.py -d A4:C1:38:91:79:3F -c 1 -call callback.py
Trying to connect to A4:C1:38:91:79:3F
Temperature: 28.78
Humidity: 65
Battery voltage: 2.726
1 measurements collected. Exiting in a moment.
/somewhere/callback.py sensorname,temperature,humidity,voltage,timestamp A4:C1:38:91:79:3F 28.78 65 2.726 1601098469
['/somewhere/callback.py', 'sensorname,temperature,humidity,voltage,timestamp', 'A4:C1:38:91:79:3F', '28.78', '65', '2.726', '1601098469']
$
sys.argv[1]
にパラメータ名のリストが渡され
sys.argv[2]
以降に値が渡されている。
パラメータはLYWSD03MMC.pyのオプションで変化する場合が
あるらしい。
データ記録プログラム
必要な情報が揃ったので、
湿度データを記録するプログラムを作成した。
データの記録はwebサーバのapiにアクセスすることで
センサーIDと値が時刻とともにMysqlに保存している。
まず、callback用のプログラム。
$ cat xiaomi_callback.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys, os, urllib.request
sensors = {
"A4:C1:38:BC:11:D9": 132, # MAC addr: sensor_id
"A4:C1:38:1F:EB:AB": 135,
"A4:C1:38:91:79:3F": 138,
"A4:C1:38:79:5E:67": 141
}
if len(sys.argv) > 1:
params = sys.argv[1]
i = 2
data = {}
for param in params.split(','):
data[param] = sys.argv[i]
i += 1
id = data['sensorname']
sid = sensors[id]
keys = ['temperature','humidity','voltage'];
for i in range(3):
key = keys[i]
if key in data:
v = data[key]
url = 'http://my_server_addr/dms/api.put?'
url += 'sensor=%d&value=%s' % (sid+i, v)
urllib.request.urlopen(url)
else:
for k in sensors.keys():
print(k)
$
cronから呼び出すプログラム
nari@hslpc24$ cat xiaomi.sh
#!/bin/bash
DIR="/home/my_program_dir"
for id in `$DIR/xiaomi_callback.py`; do
/usr/local/bin/python3 -u $DIR/LYWSD03MMC.py -d $id -c 1 -call xiaomi_callback.py
done
$
このプログラムをcronで10分毎に起動している。
$ crontab -l
...
*/10 * * * * /home/my_program_dir/xiaomi.sh > /dev/null
...
$
実装
調べたMACアドレスと割り当てたセンサーID(番号)を印刷し、
両面テープでXIAOMI湿度計に貼り付けた。
|
|
|
センサー番号とMACアドレスを印刷 |
両面テープで貼り付け |
ホルダーにピッタリ入る |
フィラメント・ケース-3Dプリンタ間は
PTFEチューブにいれてフィラメントを送っている。
このチューブには湿気の侵入を防ぐことと
3Dプリンタがフィラメントを引いても
ケースが動かないという利点がある。
X-Smartのヘッドはチューブを受け止める
形状になっているが、ENDER3V2はそうなっていないので、
自作の部品を追加し、チューブを受け止めれるようにした。
|
|
|
Ender3V2側のチューブ受け部品 |
フィラメントケース |
湿度計のLCD表示は角度を選ばないと見ずらい |
計測結果
前にも書いたが
Mysqlに書き込んだデータは
grafanaでグラフ化し
ブラウザで見る。
昨晩、湿度計を設置したあとのグラフを以下に示す。
湿度計は今回設置したXIAOMIの4個以外に2個ある。
1つは netatomの室内モジュールについているもので、
もう一つは,
sht31モジュールで自作したもの。
XIAOMIの湿度計が、なかなか来ないので
待ちきれず作ってしまった。
sht31は湿度の精度は±2%で高精度ということになっている。
これと比べるとXIAOMIの奴は10%程度高い湿度を示すようである。
XIAOMIの湿度計の設置状況は以下の通り。
- X-Smart用フィラメントBox(1F設置)
- Ender3V2用フィラメントBox
- フィラメント保管Box
- Ender3V2近く
上3つは密閉ケースで乾燥機が入っている。
ケースに入れた時点で湿度が下がり始め、
蓋を開けたタイミングで湿度が戻る様子が
観測できる。
今後
乾燥剤がどれくらいの期間持つかとか、
本当に湿度絡みのトラブルがなくなるのかとか、
様子を見ていきたい。
余ったXIAOMI湿度計1個は
フィラメントBOXをもう1個作って入れる予定。
2020/10/09(金)追記
このプログラムでは問題が発生してしまった。
詳しくは
XIAOMI湿度計その後参照。