1. はじめに
ITエンジニアHiRØがraspberry piと温湿度センサーを使ってIIJのMachinistで温度監視をするだけのブログになります。
2. 環境
ハード:Raspberry pi 3 Model B (以降はラズパイと表示)
センサー:DHT11 (ラズパイの隣)
監視:IIJ-Machinist
3. ラズパイとセンサーの接続
2.構成で説明した図の左から順に下記となります。
・GND
・DATA
・VCC
ピン配置図を参考に下記のように接続を行います。
・ピン(1):VCC
・ピン(6):GND
・ピン(8):DATA
3. IIJ-Machinistの設定
次にIIJのMachinistの設定ですが、アカウント作成を行いGetting Startedのページを読み進め自分好みに設定を行ってください。 私の環境を簡単に説明するとMachinist側で作成する物は下記になります
・料金プラン:フリープランでアカウント作成
・エージェント数:1つ
※メトリックはデータをPostしたら逐一追加される。フリープランの場合10メトリックまで。
4. スクリプト
# coding: UTF-8 # RaspberryPiでDHT11センサーから温湿度データを取得 import urllib2 import json import time import dht11 import RPi.GPIO as GPIO import requests Temp_sensor=14 #温湿度データ取得 def get_temp(): GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) instance = dht11.DHT11(pin=Temp_sensor) while True: #データ取得 result = instance.read() return result.temperature,result.humidity def post(temperature): api_key = 'XXXXXXXXXXXXXX' #ここは個人のapi-keyを設定 url = 'https://gw.machinist.iij.jp/endpoint' header = { 'Content-Type': 'application/json', 'Authorization': 'Bearer '+ api_key, 'User-Agent': 'Python' } data = { 'agent': 'Home', 'metrics': [ { 'name': 'temperature', 'namespace': 'Environment Sensor', 'data_point': { 'value': temperature } } ] } senddata = json.dumps(data).encode('ascii') req = urllib2.Request(url, data=senddata, headers=header) response = urllib2.urlopen(req) if __name__ == '__main__': try: while True: #温湿度データ取得関数コール temperature,humidity = get_temp() #画面出力&Machinistへpost if temperature == 0: continue print("Temperature = ",temperature,"C"," Humidity = ",humidity,"%") post(temperature) #1分間隔 time.sleep(60) except: pass
スクリプト作成には下記のDHT11についてのリポジトリの物を使用する。 流れは簡単に説明すると温湿度データを取得してMachinistへpostする流れです。 POSTする方法はHTTPでJSONとしてデータを送ります。
5. 実行
標準出力上では温度と湿度の両方を取得しております。
6. IIJ-Machinistは・・・
Machinistへpostされてることを確認。 グラフの表示は折れ線や積み上げ面グラフなど様々です。
是非、試してみてください。
7. 余談
今回使った温湿度センサーで得られた温度の精度について、 自宅のDysonの冷暖房装置の温度センサー情報と比べてみたが近い値であることが確認できた。
8. 最後に
今回はネットワークやansibleに関してではなかったが、たまにはこうして他の技術も取り上げて行きます。