下林明正のブログ

個人的かつ雑多なブログです。

CO2濃度の監視をCO2-miniとMackerelとRaspberry Piで実現する方法

CO2濃度が高まると衛生管理上よろしくないとされています。 リモートワークがしばらく続きそうなので自室のCO2濃度を監視することにしました。

できあがったグラフ

f:id:shimobayashi:20200418123150p:plain

こういう感じでグラフにできました。平気で1000ppmを超えていることが多いですね。換気扇を回すとCO2濃度が下がっていることがわかります。

しきい値は一旦1000ppmでwarning, 1500ppmでcriticalとしてみました。 このあたりはこれから運用しながら調整する予定です。

必要なもの

  • CO2-mini
    • CO2濃度を測れるUSBデバイス。マニュアルに記載は無いけどホストマシンから値を取得できます
    • 自分が調べた時点ではモノタロウで買うのが一番安かったです。日曜日に調べていたら土日限定の5%クーポンというのがあったので更に安くなりました
  • Mackerel
    • 数値を送るとグラフにしてくれたり、しきい値を越えるとLINEへ通知してくれたりします
    • 好みの監視ソリューションを使えばいいと思いますが、後述の自分が書いたコードはMackerelにしか対応していません
  • Raspberry Pi
    • さしてスペックは必要ないので、古いRaspberry Piでも十分です。自宅にはRaspberry Pi 2 B+が余っていたのでそれを使うことにしました
    • 別にRaspberry Piじゃなくても24時間つけっぱなしのネットワークにつながるマシンなら何でも良いと思います
  • GitHub - shimobayashi/co2-mini-to-mackerel: CO2-miniで取得できる数値をMackerelへ投げるだけのスクリプト
    • これらをつなぐソフトウェアです
    • 手頃なものが無さそうだったので今回自作しました。nodeで動いて、systemdでデーモン化できます
    • 使い方はREADMEを読んでください

感想

思ったよりも自室のCO2濃度が高かったことが分かりました。たしかに換気するとさわやかな感じがする。 一方で、あんまり換気していると室温的には問題なくても体感温度が寒いような感じもしました。 あと、寝ている間に換気扇を回しっぱなしにしていると騒音が気になるのか眠りが浅い気がするという問題もある。 このあたりはいい塩梅を見つけていこうと思います。

投資は自分の場合8000円+作業時間で済んだので、これで健康になれたり生産性が上がる可能性があるなら良いんじゃないか、という印象です。 可視化されたことで気にしすぎて気を病む、みたいなこともありそうなのでほどほどでいきたい。

換気扇のON/OFFをする運用になったら、次はSwitchBotとかで換気扇の操作を自動化したいです。 Mackerelのダウンタイムと組み合わせれば寝ている間は換気しない、ということもいい感じにできるかもですね。

作業記録

  • CO2監視ソリューションを調べる。Netatomoは高いし手持ちのNature Remoと役割が結構被っている。CO2-miniってやつをRaspberry Piにつないでうまいことやってる人たちがたくさんいたので、その方向性で進める
  • Raspberry Piはせっかくなので最新っぽいNOOBSでクリーンインストール
  • CO2-miniを読むやつは色々あるみたいだったけど、なんとなくお手軽そうに見えた GitHub - maddindeiss/co2-monitor: Measure CO2 and temperature in nodejs with the TFA-Dostmann AirControl Mini を試すことにする
  • 以下のような手順で動かせた
sudo apt-get update
sudo apt-get install libusb-dev # usbモジュールのビルドに必要だった
npm install
sudo node example.js # sudoしないとUSBデバイスに触れなかった。udev ruleとかいうやつをがんばって書けば要らなくなるかも知れない
  • 自分のコードからこのモジュールを使ってMackerelへ投稿できた
  • Raspberry Piはなんだかんだで再起動することが多いので、マシンの起動とともに勝手に動いてほしい。そのためにデーモン化してみる
    • 有名所ではforeverというnpmモジュールがあるようだけど用途が違うように見えた
    • 普通にLinuxの世界でなんとかするか、という気分になった。最近はsystemdってやつでこういうことするイメージなので軽く調べてみたところ、普通にやったらできそうだった
    • 適当にやったら意外とサクッとできた github.com
  • 完成