Xiaomi Mijia LYWSDCGQ/01ZM 温湿度計雑感です.
結論から言うと,
単4電池が使えるのが良いところだと思います.お値段も安いですしね.ただし,磁石が弱いのが玉に瑕
です.
動機と仕様
職場の個人的に使っているサーバーを置いてある部屋の温度監視用です.いままで,USB 接続の温度計
を使っていたんですが,設置の自由度があまりないのと,サーバーにログインしてコマンドを叩かないと温度を見ることができないのが不便だったので,これを何とかするために購入したものです.
お値段は2500円程度と,少しお高めです.しかし,
- 温度(0度〜60度)と湿度(0〜99%)が測れる
- Bluetooth LE 対応
- 常時表示の LCD スクリーン
- 単4電池対応(1年の電池持ち)
- 壁掛け(20g)
と,氷点下の温度に対応していないこと以外は特に気になるような部分はありませんし,部屋の温度を測るだけだから,実用上,氷点下まで測れる必要はありません.また,冒頭の写真を見ての通り,丸くてかなりオシャレなのも良いところです.ただし,厚みは若干ありますが,これは単4電池が使えることから仕方のないところでしょう.
なお,より安価な Xiaomi Mijia LYWSD03MMC という製品もあるようですが,違いは,
- 製品形状(LYWSD03MMCは四角,LYWSDCGQ/01ZMは円)
- 電源(LYWSD03MMCはCR2032,LYWSDCGQ/01ZMは単4)
辺りだと思います.製品の比較は英語サイトですが,
を見ると詳しく載せられていますが,私の場合は単4電池が使える(エネループが使える)方が良かったので,LYWSDCGQ/01ZM を選択しました.
開封の儀
製品パッケージは以下の通り,プラスチックの透明なケースに入れられていいます.製品本体の外観がわかりやすいのは良いんですけど,もっと簡素な紙箱でも良いんじゃないかなと思います.
入っているものは以下の通りです.本体と壁掛けアダプターと単4電池と説明書となります.
残念ながら説明書は日本語ではなく中国語版です.電池はもちろん中国製です.あと本体とアダプターは磁石でくっ付きます.そして,写真は撮り忘れましたが,壁掛けアダプターの裏面には3Mの両面テープが添付されていました.もう少し強い磁石が使われていれば両面テープを使わずに冷蔵庫等に固定できるのですが……少し残念なところです.
本体背面は以下の通りです.中央に電池ボックスが配置され,その下に Bluetooth ペアリング用の灰色の丸いボタンが用意されていました.
見ての通り,製品は何の飾り気もないプラスチック製なのですが,高級感はそれなりです.写真で見るより実際の本体の方がキレイです.写真で見るといかにも無*良品っぽいんですが,実物は無*良品のものよりももう少し良いかなという感じです.
なお,本製品,Bluetooth ペアリング用のボタン以外のスイッチ(ボタン)は用意されていません.つまり,電池を入れたらすぐに電源が入りますし,電源を切ることもできませんが,画面に常時温湿度を表示してくれる時計と同じようなものなので特に問題に思うことはないかなと思います.
また,本製品,Xiaomi の IoT 温湿度計なので,Bluetooth 経由でもちろん温度と湿度を取得できるのですが,お値段的にも機能的にも,シンプルなデザインの単なる温湿度計として使うだけでも元は取れると思います.
IoT な利用方法
本製品,Mi Home アプリを使うことで,Bluetooth LE 経由で温湿度を取得することができます.しかし,この Mi Home アプリ,ユーザー登録をしないと使うことができません.高々温湿度を確認するためだけに Xiaomi にユーザー登録はしたくないので,今回は Raspberry pi で温湿度を取得することにしました.
Mi Home アプリと組み合わせて使う方法については,
に記事がありましたが,正直,これだと Bluetooth LE で通信可能な自宅でしかスマホで温湿度確認できませんし,自宅で温湿度確認するだけなら液晶画面を見れば良いので,あまりありがた味がありません.と言うことで,この類の製品は結局ゲートウェイ装置と合わせて導入しないと意味がないのですが,Xiaomi の製品はプラグ形状からして日本では使いにくい.
しかし,有り難いことに Xiaomi の温湿度計,お手頃価格でしかもデザインも良いからだと思いますが,プロトコル等解析されていて,Raspberry pi などで Bluetooth LE で温湿度を取得することがでます.ただし,注意点として,
機種ごとに取得の方法が少し違う
らしい.
と言うことで,いくつか Raspberry pi OS で使えるアプリを試したのですが,最も簡単で良かったのは,
です.何と単なる Bash スクリプトで,ほぼ素の Raspberry Pi OS Lite で使えます.
実際の導入方法は以下の通りです.
$ sudo apt install mosquitto-clients bc git -y $ cd /usr/local/src $ sudo git clone https://github.com/mplinuxgeek/Xiaomi-BLE-Temperature-and-Humidity-sensor $ cd Xiaomi-BLE-Temperature-and-Humidity-sensor $ sudo ln -s $(pwd)/mi_temp.sh /usr/local/bin/mi_temp
このままでも使えますが mosquitto-clients の実行部分でデータを送る mosquitto Broker が見つからないというエラーがでます.この mosquitto というのはどうも MQTT なる IoT 系のプロトコルに対応するためのアプリの様で,単に Raspberry pi OS で温湿度を取得したいだけなら必要がありません.
と言うことで,この辺りに対処するため,スクリプトを以下の通り少し改変します(diff -u で差分のみ示します).
$ diff -u mi_temp.sh.orig mi_temp.sh --- mi_temp.sh.orig 2020-08-02 11:03:21.871321189 +0900 +++ mi_temp.sh 2020-08-02 11:07:04.419574323 +0900 @@ -1,9 +1,9 @@ #!/bin/bash mqtt_topic="mi_temp" -mqtt_ip="192.168.1.60" +mqtt_ip="255.255.255.255" -sensors_file="/opt/sensors" +sensors_file="/usr/local/etc/sensors" cel=$'\xe2\x84\x83' per="%" @@ -69,7 +69,7 @@ echo " Humidity: $humid$per" echo " Battery Level: $batt$per" echo " Dew Point: $dewp$cel" - + if [[ "$mqtt_ip" != "255.255.255.255" ]]; then echo -e -n " Publishing data via MQTT... " if [[ "$temp" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then /usr/bin/mosquitto_pub -h $mqtt_ip -V mqttv311 -t "/$mqtt_topic/$name/temperature" -m "$temp" @@ -87,6 +87,7 @@ /usr/bin/mosquitto_pub -h $mqtt_ip -V mqttv311 -t "/$mqtt_topic/$name/dewpoint" -m "$dewp" fi echo -e "done" + fi done < "$sensors_file" #echo -e "\nclosing HCI device"
見ての通り,やっていることは簡単で,
- mqtt_ip 変数の値を 192.168.1.60 から 255.255.255.255 に変更
- sensers_file の位置を /opt/ から /usr/local/etc/ に変更
- mqtt_ip の値が 255.255.255.255 なら mosquitto_pub コマンドを実行しない
ようにしただけです.
あとは,
$ sudo hciconfig hci0 up $ sudo btmgmt le on $ sudo hcitool lescan
のように実行すれば,
... 4C:65:00:00:00:00 MJ_HT_V1 ...
のような感じで温湿度計の MAC Address が取得できますので,/usr/local/etc/sensors に,
4C:65:00:00:00:00,MJ_HT_V1
のように記述すれば,
$ mi_temp Opening and initializing HCI device Enabling LE Mode hci0 Set Low Energy complete, settings: powered bondable ssp br/edr le secure-conn Sensor: MJ_HT_V1 (4C:65:00:00:00:00) Getting MJ_HT_V1 Temperature and Humidity... success Getting MJ_HT_V1 Battery Level...success Temperature: 28.3℃ Humidity: 67.0% Battery Level: 100% Dew Point: 16.6℃ Finished
のような感じで温湿度を取得できます.
なお,このスクリプトは複数機器に対応しているようで,その場合は,/usr/local/etc/sensors の内容を
4C:65:00:00:00:00,Living 4C:65:00:00:00:00,Dining
の様にすれば良いだけの様です.もちろん Mac Address は機器に応じたものを使います.
あと,上のように改変すれば,mosquitto-clients 入れる必要はありません.シェルスクリプトを見ると必要なのは gatttool だけのようで,つまり,Bluez パッケージさえ入っていればこのスクリプトは動くみたいですね.と言うか,Bluetooth LE での値の取得ってこんな簡単にできるんですね.知りませんでした.
以上!