AliExpressに注文していた XIAOMIの湿度計がやっと届いた。 8月16日に注文していたので5.5週ぐらいで 届いたことになる。 価格は4個で1,229円。1個あたり306円と激安。
コンパクトで可愛いデザイン。 電池の絶縁テープを抜くと すぐに温度と湿度が表示された。 裏蓋を外し内部を確認。 電池はCR2032。 MOYASHI氏のフィラメントケースの ホルダーにバッチリはまって気持ちが良い。
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が表示された。 これを読んで以下のことがわかった。
-c
で回数を指定しないと永遠にデータを表示し続ける-call
でデータ取得時に外部プログラムを起動可能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] $
-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の湿度計の設置状況は以下の通り。
上3つは密閉ケースで乾燥機が入っている。 ケースに入れた時点で湿度が下がり始め、 蓋を開けたタイミングで湿度が戻る様子が 観測できる。
乾燥剤がどれくらいの期間持つかとか、 本当に湿度絡みのトラブルがなくなるのかとか、 様子を見ていきたい。
余ったXIAOMI湿度計1個は フィラメントBOXをもう1個作って入れる予定。