Raspberry Pi + CO2-mini + Zabbixで室内CO2濃度を継続モニタリングする構築手順
Image credit: Tomokatsu Yukishitaコロナ禍をきっかけにCO2モニター「CUSTOM CO2-mini」を購入しました。USB給電で動作するこのセンサー、調べてみるとUSB経由でデータ取得もできることが判明。Raspberry Piに接続してZabbixで継続的に室内CO2濃度をモニタリングする仕組みを作ったので、構築手順をまとめます。
用意するもの
Raspberry Pi

CO2-mini(CUSTOM CO2モニター)

電源・microSDカード


CO2-miniからのデータ取得(Python)
CO2-miniをRaspberry PiにUSB接続すると、特別なドライバーなしで認識されます。データ取得には heinemml/CO2Meter というPythonライブラリを使います。
ライブラリのインストール
Raspberry Pi OS Bookworm 以降では、システムの Python に直接 pip インストールすることが制限されています。仮想環境を作成してその中にインストールします。
python3 -m venv /root/co2env
/root/co2env/bin/pip install git+https://github.com/heinemml/CO2Meter
sudo pip3 install ... は Raspberry Pi OS Bookworm(2023年以降)では “externally managed environment” エラーになる場合があります。仮想環境を使う手順が安全です。CO2・温度をShared Memoryに書き出すスクリプト
ZabbixエージェントからCO2値を読み取れるよう、取得した値を /dev/shm/ 以下のファイルに継続的に書き出します。
from CO2Meter import *
import time
sensor = CO2Meter("/dev/hidraw0") # 環境によって hidraw1 などになる場合があります
while True:
time.sleep(1)
data = sensor.get_data()
if 'temperature' in data and 'co2' in data:
with open('/dev/shm/co2', 'w') as f:
f.write(str(data['co2']))
with open('/dev/shm/temperature', 'w') as f:
f.write(str(data['temperature']))
/dev/hidraw0 のデバイスパスは環境によって異なります。ls /dev/hidraw* で確認し、CO2-miniが認識されているパスを指定してください。起動時に自動実行する(crontab)
rootでないとデバイスにアクセスできないため、root権限で起動するシェルスクリプトを作成します。
/root/co2.sh
#!/bin/bash
sleep 5
/root/co2env/bin/python3 /root/co2.py
crontabに追加して起動時に自動実行するよう設定します。
@reboot /root/co2.sh
Zabbixの設定
ZabbixからRaspberry Piのデータを収集するには、zabbix-serverとzabbix-agentの両方を設定する必要があります。
方針
- Raspberry PiのShared Memory(
/dev/shm/)にCO2値と温度を常時書き出す - Zabbixエージェントはそのファイルを
catして返す
zabbix-server側:ホストとアイテムの作成
Raspberry Piにzabbix-agentをインストールし、zabbix-serverでホストを追加します。

CO2濃度と温度の2つのアイテムを作成します。


アイテムキーは以下にしました。
co2.co2 (CO2濃度)
co2.temp (温度)
zabbix-agent側:設定ファイルの編集
/etc/zabbix/zabbix_agentd.conf でサーバーアドレスを指定します。
Server=<zabbix-serverのアドレス>
ServerActive=<zabbix-serverのアドレス>
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf
UserParameterの設定
/etc/zabbix/zabbix_agentd.conf.d/userparameter_co2.conf を作成します。Shared Memoryのファイルを cat して返すだけです。
UserParameter=co2.co2,cat /dev/shm/co2
UserParameter=co2.temp,cat /dev/shm/temperature
設定後、zabbix-agentを再起動します。
sudo systemctl restart zabbix-agent
動作結果
CO2濃度と温度をZabbixでグラフ化できました。


CO2モニターを導入してから、換気の頻度が体感でかなり上がりました。数値で見ると「換気が必要なタイミング」が一目瞭然です。
まとめ
| 構成要素 | 役割 |
|---|---|
| CO2-mini | USB接続でCO2濃度・温度を計測 |
| Raspberry Pi | センサーからデータを取得・Shared Memoryに保存 |
| Python(CO2Meterライブラリ) | CO2-miniとの通信・データ取得 |
| Zabbix(agent + server) | データの収集・グラフ化・長期記録 |
作成したスクリプト一式はGitHubで公開しています。
GitHub - yukishita/co2-mini:CUSTOM CO2-miniをZabbixで記録するプログラム