ZabbixによるCO2濃度の監視・モニタリング「CO2-mini」 – Debian Linuxによる自宅サーバ

自宅サーバ
自宅サーバ

高いCO2濃度は、不快感、疲労、頭痛、集中力の低下などの症状を引き起こす可能性があると言われています。
CO2-miniという機器を使い、ZabbixでCO2濃度を監視・モニタリングする設定を解説したいと思います。

CO2-mini

CO2-miniは株式会社カスタムから発売されている、CO2濃度を測定するための機器です。

CO2-mini
https://www.kk-custom.co.jp/emp/CO2-mini.html

Amazonなど日本のECサイトから入手可能です。

カスタム (CUSTOM) CO2モニター CO2-mini
https://www.amazon.co.jp/dp/B00I3XJ9LM

データの取得方法

CO2-miniをサーバに接続し、データを取得できるようにします。
データを取得できるPythonパッケージがGitHubにあるのでそちらを使います。

GitHub - heinemml/CO2Meter: Python Module to use co2meter code derived from https://hackaday.io/project/5301-reverse-engineering-a-low-cost-usb-co-monitor
Python Module to use co2meter code derived from - heinemml/CO2Meter

udevルール

udevルールに設定を行います。
udevは、Linuxシステム上でデバイスファイルを動的に管理するための仕組みです。
このルールは、特定のUSBデバイスが接続された際に、アクセス権限やシンボリックリンクを設定するために使用されます。

sudo vi /etc/udev/rules.d/99-co2mini.rules

KERNEL=="hidraw*", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="a052", GROUP="plugdev", MODE="0666", SYMLINK+="co2mini"

反映

sudo udevadm control --reload-rules && sudo udevadm trigger

取得プログラム

ライブラリインストール

sudo apt -y install python3-dev python3-pip

Pythonパッケージインストール

sudo pip install git+https://github.com/heinemml/CO2Meter

取得プログラム作成
sudo vi /usr/local/bin/co2mini

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from CO2Meter import CO2Meter
import time
import json

SENSOR_TIMEOUT = 5.0  # seconds to wait for sensor data
RETRY_DELAY = 0.5  # seconds to wait before retrying after failed data read
MAX_RETRIES = int(SENSOR_TIMEOUT / RETRY_DELAY)

def main():
    sensor = CO2Meter("/dev/co2mini")
    retries = 0
    while True:
        data = sensor.get_data()
        if 'temperature' in data and 'co2' in data:
            break
        retries += 1
        if retries > MAX_RETRIES:
            print("Error: Unable to read sensor data.")
            return
        time.sleep(RETRY_DELAY)
    print(json.dumps(data))

if __name__ == '__main__':
    main()

パーミッション変更

sudo chmod 755 /usr/local/bin/co2mini

CO2濃度の他に温度も取得できます。
CO2Meterのパッケージからデータを取得する際に、co2 の値のみの取得になる場合があります、プログラムではco2temperatureの両方値が取得できた場合のみ値を返却します。

確認

co2mini

実行すると下記のようにCO2濃度・温度が取得できます。

{"co2": 771, "temperature": 27.3}

※取得に数秒かかります。

watchコマンドで、5秒間隔で確認できます。

watch -n 5 -d co2mini

Zabbix設定

Zabbix Agent

Zabbix Agentにはユーザーパラメータという、独自の監視項目を追加できる機能があります。
ユーザーパラメータにCO2濃度のデータを取得できるように設定します。

ユーザパラメータ

Zabbix Agentにユーザパラメータの設定を行います。
jqコマンドで値だけを抽出します。

sudo vi /etc/zabbix/zabbix_agentd.conf.d/co2mini.conf

UserParameter=co2mini.co2,co2mini | jq '.co2'
UserParameter=co2mini.temperature,co2mini | jq '.temperature'

Zabbix Agentの値の取得に時間がかかる場合、タイムアウトする場合があります。
デフォルトの値が3秒になっていると思うので、10秒に変更します。

sudo vi /etc/zabbix/zabbix_agentd.conf

Timeout=10

設定後、Zabbix Agentを再起動します。

sudo service zabbix-agent restart

ユーザパラメータ取得テスト

zabbix_agentdコマンドで取得できるか確認します。

CO2濃度

sudo zabbix_agentd -t co2mini.co2
co2mini.co2                                   [t|843]

温度

sudo zabbix_agentd -t co2mini.temperature
co2mini.temperature                           [t|27.4]

Zabbix Server

Zabbix Serverがデータを取得する場合も、タイムアウトする場合があります。

DockerでZabbixを構築する場合は、下記環境変数を設定することにより、タイムアウト値を設定できます。

ZBX_TIMEOUT=10

アイテムの設定

監視しているホストにCO2濃度の監視項目を追加します。
監視項目の追加は、監視ホストのアイテム作成になります。

アイテムの作成

データ収集 -> ホスト から Zabbix Serverアイテムを選択。

アイテムの作成からアイテムの追加を行います。

CO2濃度

Zabbixでは値が1000を超える場合、1000で除算されて表示されます。

単位がppmの場合、1000は1kppmの表示

単位に ! をつけることにより、除算されなくなります。

名前: CO2濃度
タイプ: Zabbixエージェント
キー:  co2mini.co2
データ型: 整数
単位: !ppm
監視間隔: 1m

キーは、Zabbix Agentに設定したユーザパラメータを設定します。

値を設定し追加する前に、データが取得できるか確認します。
下のテストボタンからアイテムのテストを呼び出し、値の取得とテストで取得できるか確認します。

最新データ

監視データ -> 最新データ から取得しているデータの確認ができます。

トリガーの設定

Zabbixにはトリガーという、特定の条件に基づいてアラートを発生させる仕組みがあります。
トリガーを使い、CO2濃度が閾値を超えたときにアラートを発生させるよう設定します。

トリガーの作成

データ収集 -> ホスト から Zabbix Serverトリガーを選択。

トリガーの作成からトリガーの追加を行います。

CO2濃度
名前: CO2濃度
深刻度: 警告
条件式: avg(/Zabbix server/co2mini.co2,#5)>1200

CO2濃度の最新の5回のデータの平均値が、1200ppmより上の場合、警告になります。

トリガーの確認

警告になった場合、メッセージが送信される設定を行うことにより、問題を早期に発見できます。

ダッシュボード

ダッシュボードにウィジットを追加し、グラフィカルに確認できるようにします。

ウィジット追加
タイプ: グラフ
名前: CO2濃度

データセット #1
  ホストパターン: Zabbix server
  アイテムパターン: CO2濃度
  塗りつぶし: 0

おわりに

Zabbixを用いて自宅サーバのCO2濃度を監視・モニタリングする方法について解説しました。
これにより、自宅のCO2濃度をリアルタイムで把握しできるようになります。
また、トリガー機能を活用することで、異常な状態になったとき、警告を受け取ることができ、問題を早期発見できるようになります。

コメント

タイトルとURLをコピーしました