ZabbixとRaspberry Piでお手軽につくる、お部屋の温度・気温ダッシュボード

ZabbixとRaspberry Piで、Ambientのようなお手軽ダッシュボードを簡単に構築してみます。

作るもの

センサーで測定した部屋の気温や湿度といったデータを、Zabbixサーバーに送信してグラフ表示する。

できること

  1. データのグラフ表示
  2. Zabbixサーバーからアラートメールを送信

などなど。Ambientでできることは大体できると思います。

構成

  1. Raspberry Pi 3 Model B : 1台

以上!

今回はZabbixにデータを送ってグラフ化することがメインなので、センサー関係は割愛します。

ちなみに、Zabbixって?

オープンソースのシステム監視ソフトウェアです。

サーバーなどから取得したデータを表示するのが本来の使い方ですが、今回はそれをセンサーから取得したデータの表示に応用しようというわけです。

大まかな仕組み

今回は、1台のRaspbery Pi にZabbixをインストールし、自分自身に対してデータを送信します。つまり、センサー端末とZabbixサーバーの1台2役です。

作り方

Raspberry Pi OS Liteをインストールします(手順は割愛)。

Zabbixサーバーの準備

Zabbixをインストールします。

sudo apt-get install zabbix

Zabbixの初期設定をします。公式サイトのドキュメントがわかりやすいでしょうか(手抜きですいません。この辺をやってると、記事が長くなるので。。。)。

アイテムの作成

Zabbixをインストールすると、自動で自分自身を「Zabbix server」として監視しているはずです。これに、データを受信するためのアイテムを作成します。

設定→ホスト→Zabbix server→アイテムを開きます。

◆温度用
・名前:温度
・タイプ:Zabbixトラッパー
・キー:temp
・データ型:数値 (浮動小数)
・単位:℃
・アプリケーション:Sensor (「アプリケーションの作成」で作成する)

◆湿度用
・名前:湿度
・タイプ:Zabbixトラッパー
・キー:humi
・データ型:数値 (浮動小数)
・単位:%
・アプリケーション:Sensor

グラフの作成

今度は、ホストの設定のグラフの設定を開きます。

・名前:環境測定
・アイテム 1: Template OS Raspbian: 温度 / Y軸:左
・アイテム 2: Template OS Raspbian: 湿度 / Y軸:右

データ送信の準備

今度は、Zabbixサーバーに対してデータを送信する環境を準備します。

今回は手順の説明なので、センサーのデータではなく手動で入力した数字を送信します。実際にセンターデータを送信するときは、適宜書き換えてください。

py-zabbixのインストール

今回は、Pythonでお手軽にZabbixを使えるライブラリpy-zabbixを使います。

sudo pip install py-zabbix

データ送信プログラムをつくる

適当な.py今回はとりあえず、定数で指定した数字を送信するコードを書きます。

#!/usr/bin/python
# coding:utf-8

from pyzabbix import ZabbixMetric, ZabbixSender

# ZABBIXサーバーのアドレス
zabbix_addr = '127.0.0.1'

# ZABBIXのキー
temp_key = 'temp'
humi_key = 'humi'


# データを指定
temperature = 適当な数字
humidity = 適当な数字

# Zabbixに送信
metrics = []
tempdata = ZabbixMetric('Zabbix server', temp_key, temperature)
humidata = ZabbixMetric('Zabbix server', humi_key, humidity)
metrics.append(tempdata)
metrics.append(humidata)
zbx = ZabbixSender(zabbix_addr)
zbx.send(metrics)

これを数値を変えて何度か実行すると、Zabbixでこんな感じのグラフを表示できるはずです。

Zabbixはもともとシステム管理ソフトですので、ダッシュボードを自由にカスタマイズしたり、トリガーを設定してアラートを飛ばしたりとかなりいろいろなことができます。ネット上に豊富に情報がありますので、皆さんぜひチャレンジしてみてください。