Machinistでリモートワーク中の自宅環境を分析する
2020年04月30日 木曜日
CONTENTS
システムクラウド本部の高橋です。
リモートワークで長時間部屋にこもると息苦しさを感じるなど、自宅の環境に気になるところがありました。
そこで環境センサを用いて自宅の環境を可視化してみることにしました。
Machinist でメトリクスを管理する の記事を受けて、自室環境のメトリクスをMachinistで収集してみます。
Machinist 公式サイト:https://machinist.iij.jp/
データ収集環境について
我が家は24時間換気が無いマンションの1階です。これまでも息苦しさを感じる度に換気をしていました。
エンジニアらしく定量的な情報で判定し解決したいと考えていました。
そんな折、当社と中部電力さんで設立した合同会社ネコリコさんからホームIoTサービスnecolico HOME+が発売されました。
オムロンさんのUSB環境センサ「2JCIE-BU01」が付属する環境情報お知らせサービスで、さっそく購入して活用し始めました。
日々利用しているうちに、この環境センサで取得した値をMachinistで可視化できないかと考え始めました。
自宅で常時動作させているシングルボードコンピュータ(SBC)に環境センサを接続してデータを収集し、Machinistに投入をする方針にしました。
環境センサはSBC本体が発する熱の影響を避けるため、USB延長ケーブルを用いて接続しています。
環境センサを準備する
環境センサはLinuxからUSBシリアル接続デバイスとして扱えることを知り、次のudevのルールを記述しました。
ACTION=="add", \ ATTRS{idVendor}=="0590", \ ATTRS{idProduct}=="00d4", \ RUN+="/sbin/modprobe ftdi_sio" \ RUN+="/bin/sh -c 'echo 0590 00d4 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id'", \ SYMLINK+="2JCIE-BU"
idVendorとidProductで指定されたデバイスが接続されたときに、ftdi_sioデバイスドライバを読み込み、シリアル接続デバイスとして扱えるようにします。
udevのルールを記述してudevdをrestartし、デバイスを接続すると、/dev/ttyUSB0 と /dev/2JCIE-BU (/dev/ttyUSB0にシンボリックリンク)が作成されます。
環境センサの仕様に沿って/dev/ttyUSB0に接続をすると、環境センサの制御と測定データの取得が可能になります。
センサから定期的にデータを取得する
環境センサに接続をして仕様書にある各種コマンドを発行すると、コマンドに応じた応答が得られます。
各種コマンドは例えば次のようなものです。
- LEDを指定した色で点灯する
- LEDを消灯する
- センサで測定した値を要求し、応答を得る
こうしたコマンドを組み合わせて得られた応答を整理し成形します。
自宅では分析したい次の10項目を60秒間隔で取得しました。
- 気温 (temperature)
- 相対湿度 (relative_humidity)
- 照度 (ambient_light)
- 気圧 (barometric_pressure)
- 騒音 (sound_noise)
- 総揮発性有機化学物質相当量 (eTVOC)
- 二酸化炭素濃度相当量 (eCO2)
- 不快指数 (discomfort_index)
- 熱中症警戒度 (heat_stroke)
- スペクトル強度 (si_value)
Machinistにデータを投入し可視化する
MachinistはAPIキーを発行すると、JSONデータを送信(POST)して分析を始められます。
取得した環境センサのデータを、Machinistの送信データの仕様に加工して送信します。
自宅では自室だけでなく、複数の居室に環境センサを配置しているため、タグ機能を用いて振り分けています。
送信データの一部を取り出して表示すると、例えば次のような内容です。
{ "metrics": [ { "data_point": { "timestamp": 1587706284, "value": 21.61 }, "namespace": "env_sensor", "name": "temperature", "tags": { "location": "studyroom" } }, { "data_point": { "timestamp": 1587706284, "value": 40.91 }, "namespace": "env_sensor", "name": "relative_humidity", "tags": { "location": "studyroom" } }, { "data_point": { "timestamp": 1587706284, "value": 239 }, "namespace": "env_sensor", "name": "ambient_light", "tags": { "location": "studyroom" } }, ... ], "agent_id": "deadbeef-c0ed-fee1-cafe-abadbabef00d" }
取得状況
環境センサのデータ取得とMachinistへデータ投入を定期的に実行すると、自室の”空気感”が見えてきます。
Machinistはアラートも設定でき、指定した値を超過したときに通知もできます。
こちらは、eCO2の上昇に気が付いて換気をしたときの様子です。
9:00すぎに換気を始めると、eCO2値がどんどんと下降していきます。
リモート会議に合わせて換気を止め、戸締りをするとeCO2値が上昇している様子がわかります。
総揮発性有機化学物質相当量 (eTVOC)、二酸化炭素濃度相当量 (eCO2)は、相当量(equivalent)という通り厳密な値ではありません。
特にeCO2は、eTVOCから算出されるため、相当量の相当量になり、突然異常な値が記録される場合があるようです。
Machinistの無料枠はあっという間に使い切ってしまいました。
最後に
環境センサで取得した自宅の環境を、Machinistで分析する方法を紹介しました。
Machinistは無料プランの範囲でも自宅環境の分析に十分な機能があります。
皆さんも身近にあるデータでMachinistを試してみてください。