読者です 読者をやめる 読者になる 読者になる

屋内の二酸化炭素濃度を測定する

その眠気、酸欠だから 外へ出ろ」という川柳が回ってきたので二酸化炭素濃度を測定したくなった。

室内環境をかんたんに測定する手法として Netatmo Weather Station を利用するというものがある。これは確かに温度・湿度・CO2・騒音などを測定することができる上に、屋外機もあり屋外気温・湿度まで測れる優れものであるが、高価である(2万円強)・Web サービスと統合されているのでサービス終了と同時に使えなくなる可能性がある などの問題もある。加えて私の環境では、すでに自前で温度・湿度・気圧の測定は行っていたため、追加で二酸化炭素濃度のみ測定できれば十分であった。

Arduino などに接続できる二酸化炭素濃度計は存在することはするのだが、高額(6000円超)・キャリブレーションの必要性などがあり面倒である。

そこで、USB 接続の CO2 濃度計 CO2-mini-M を利用することにした。CO2 濃度はデジタル画面に表示されるのみで、USB はただ電源を得るためだけに使われているかのように説明書には書かれているのだが、実際には HID として PC に認識され、濃度データの送信も行われているらしい。そのデータを解読した猛者 がいるので、ここの "the real, actually working Python code" を取得して co2monitor.py として保存し、

$ sudo python co2monitor.py /dev/hidraw0

と実行することで他の値と同時に CO2 の値が取得できる。CO2 の値を取得している部分はコードを読めば明らかなので、そこに自分がさせたい処理を書いて終了。私の場合は ElasticSearch へデータを送信するコードを書き加えた。

このままだと /dev/hidraw0 からの通信が sudo しないと見えないので、他のユーザーも利用可能とするために以下の設定を行った。

$ sudo vi /etc/udev/rules.d/90-hidraw-permissions.rules
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="plugdev"

ちなみに同様の手法に関する日本語での他の紹介ページは こちら

ちょっと使ってみた結論としては、自分でログ取得部分から表示部分までプログラムするのがめんどいし、屋外モジュールを自分で作るのは難しいし(電池で長期間動かすのつらい・無線で飛ばすのもつらい)、Netatmo は IFTTT にもチャンネルを持っているAPI も持っている のだから、ふつうに Netatmo を購入して毎日1回ログを取得するコードを書くのがいいと思いました。つらい。