高い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にあるのでそちらを使います。
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
の値のみの取得になる場合があります、プログラムではco2
とtemperature
の両方値が取得できた場合のみ値を返却します。
確認
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濃度をリアルタイムで把握しできるようになります。
また、トリガー機能を活用することで、異常な状態になったとき、警告を受け取ることができ、問題を早期発見できるようになります。
コメント