Sense HAT の温度・湿度・気圧データを InfluxDB へ登録

メモ:

Sense HAT で取得できる温度・湿度・気圧を InfluxDB へ記録していきます。

【参考情報】

タイムゾーンではまったので修正(2019/08/20)

※ InfluxDB の時間は、 UTC で登録した方が便利です。 now() 関数で返される日時は、 UTC のようで WHERE 句で now() を使いたい時など時間のズレを意識する必要がなくなります。

InfluxDB にデータベースを作成する

InfluxDB に 「 factory_env 」 データベースを作成します。

$ influx
Connected to http://localhost:8086 version 1.7.7
InfluxDB shell version: 1.7.7
> CREATE DATABASE factory_env
> USE factory_env
Using database factory_env

Python の InfluxDB モジュールインストール

Python から InfluxDB を使うため influxdb パッケージをインストールします。

$ sudo apt-get install python3-influxdb

※ pip でもインストールできます。(pip3 install influxdb)

データ登録用のプログラム作成

envsensor.py というファイルを作成します。

ざっくりプログラムの流れは、 InfluxDB に接続し環境センサーから値を取得します。取得したデータをもとに JSON 形式で登録データを作成し、 write_points メソッドで登録用のリクエストを発行しています。

#!/usr/bin/python3

from sense_hat import SenseHat
from influxdb import InfluxDBClient
from datetime import datetime
from pytz import timezone


client = InfluxDBClient(host='ホスト名',port=8086,database='factory_env')
sense = SenseHat()

time = datetime.now(timezonr('UTC')).isoformat()
temp = round(sense.get_temperature(),1)
pressure = round(sense.get_pressure(),1)
humidity = round(sense.get_humidity(),1)

json_body = [
    {
        "measurement": "environment",
        "tags": {
            "zone": "BLD13",
            "host": "hostA"
            },
        "time": time,
        "fields": {
            "temp": temp,
            "pressure": pressure,
            "humidity": humidity
            }
        }
    ]

client.write_points(json_body)

作成したプログラムを実行できるよう権限を設定します。

$ chmod 755 envsensor.py

プログラムを実行して InfluxDB にデータが登録されることを確認します。

$ ./envsensor.py

あとは、 cron で定期的に実行すれば完了です。