MH-Z19でCO2濃度をリアルタイム計測してMackerelでアラート通知する

以前、Withings WS-50を使ってCO2濃度をCloudWatchメトリクスに保存するようにした。

CO2濃度の履歴がグラフで見れるのは便利だが、WS-50の計測値はリアルタイムではないため換気すべきタイミングに気づけないという問題があった。

在宅勤務になり家にいる時間も増えてきたので、リアルタイムにCO2が測れるようにしたいと思い、安価なCO2センサであるMH-Z19を購入した。

ピンヘッダとはんだが手元になかったので、以前買ったスルーホール用テストワイヤを使ってセンサーとRaspberryPiを接続。

配線方法とシリアル通信の設定方法に関しては下記記事を参考にさせていただいた。

Raspberry Pi 3 で CO2濃度を測る (Raspbian OS) - Qiita

今回はRaspberryPi Zero上で動かしており、Mackerel Agentを入れるほどでもなかったので、別のRaspberryPiで使っているMackerelのホストIDを間借りしてカスタムメトリクスを作ることにした。

以下のようなco2_to_mackerel.shを作成し、

HOST_ID=
API_KEY=
CO2=`sudo python3 -m mh_z19 | jq ".co2"`
JSON=$(cat << EOS
[
  {
    "hostId":"${HOST_ID}",
    "name":"custom.co2.ppm",
    "time":$(date +%s),
    "value":${CO2}
  }
]
EOS
)

curl -s https://mackerel.io/api/v0/tsdb \
-H "X-Api-Key: ${API_KEY}" \
-H "Content-Type: application/json" \
-X POST \
-d "${JSON}"

cronで1分おきに計測値を送信するように設定。

* * * * * $HOME/co2_to_mackerel.sh >> /dev/null 2>&1

あとはCO2濃度に応じたアラートを設定して完成。

これで換気すべきタイミングにアラートが飛ぶようになった。

参考