気まぐれハック

HiRØのゆるふわIT備忘録

IIJ-Machinistを使ってみた

1. はじめに

ITエンジニアHiRØがraspberry piと温湿度センサーを使ってIIJのMachinistで温度監視をするだけのブログになります。

2. 環境

ハード:Raspberry pi 3 Model B (以降はラズパイと表示)

センサー:DHT11 (ラズパイの隣)

監視:IIJ-Machinist

machinist.iij.jp

f:id:HiRo1325:20210112230143j:plain

3. ラズパイとセンサーの接続

2.構成で説明した図の左から順に下記となります。

・GND

・DATA

・VCC

ピン配置図を参考に下記のように接続を行います。

・ピン(1):VCC

・ピン(6):GND

・ピン(8):DATA

f:id:HiRo1325:20210112233219p:plain

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としてデータを送ります。

github.com

5. 実行

標準出力上では温度と湿度の両方を取得しております。

f:id:HiRo1325:20210112225605p:plain

6. IIJ-Machinistは・・・

Machinistへpostされてることを確認。 グラフの表示は折れ線や積み上げ面グラフなど様々です。

是非、試してみてください。

f:id:HiRo1325:20210112230950p:plain

f:id:HiRo1325:20210112231008p:plain

7. 余談

今回使った温湿度センサーで得られた温度の精度について、 自宅のDysonの冷暖房装置の温度センサー情報と比べてみたが近い値であることが確認できた。

f:id:HiRo1325:20210113012324j:plain

8. 最後に

今回はネットワークやansibleに関してではなかったが、たまにはこうして他の技術も取り上げて行きます。