Raspberry Piで収集したセンサー情報をMachinistに送信する

Raspberry Pi

Machinistで気温、湿度、気圧、照度、CPU温度などを管理する

これまでRaspberry Piで取得した気温データなどはMackerelで管理していました。

Raspberry Pi Zero WHにMackerelを導入して死活監視と気温などのグラフ化を行う
Mackerelを導入してできることMackerelは簡単に言うとSaaS型の監視サービスです。疎通確認やCPU使用率などを監視して問題があるとSlackやメールにアラートを飛ばしてくれます。クラウド型なので、自宅が停電した場合も問題なく通...

しかし、Mackerelの無料アカウントでは1日分のグラフしか見ることができません。
そこで、別のサービスであるMachinistを利用してみます。

Raspberry PiとBME280を利用して気温、湿度、気圧を測定する
今回はRaspberry Piと温湿度気圧測定モジュールを利用してデータの取得を行います。BME280は1つのモジュールで温度、湿度、気圧が測定可能で、接続もI2Cなので非常に簡単です。構成構成Raspberry Pi Zero WHBME...

Machinistに登録する

https://machinist.iij.jp/#/

まずは上記サイトからアカウントを登録します。

APIキーを取得する

アカウントを登録し、ログインができたら右上のメールアドレスの部分からアカウント設定を選択します。

そうするとAPIキーが表示されていると思うので、それをコピーしておきます。

Raspberry Piでシェルを作成する

Machinistのメトリクスはエージェントの導入など不要で、curlコマンドで簡単に送信することができます。

サンプルを参考にしながら適当にシェルを作成します。

https://machinist.iij.jp/getting-started/
machinist.sh
#!/bin/bash

api_key=<your_api_key>
agent="RaspberryPi3"
name="temperature"
namespace="Environment Sensor"

value="21.2"

curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer ${api_key}" https://gw.machinist.iij.jp/endpoint -d @- << EOS
{
  "agent": "${agent}",
  "metrics": [
    {
      "name": "${name}",
      "namespace": "${namespace}",
      "data_point": {
        "value": ${value}
      }
    }
  ]
}
EOS

api_keyの部分に先程のAPIキーを入力します。

この状態でシェルスクリプトを実行してみます。
実行権も忘れずに。

$ chmod +x machinist.sh
$ ./machinist.sh
{"message":"Succeeded"}

成功したようです。Webを見てみます。

無事に送信が確認できました!

自動的にデータを送信する

少しシェルスクリプトを修正します。
コマンドライン引数からメトリックの設定をできるようにします。

machinist.sh
#!/bin/bash

api_key=<your_api_key>
agent="RaspberryPi3"

if [ $# -ne 3 ]; then
	echo "Usage: $0 <namespace> <name> <value>"
	exit
fi

namespace=$1
name=$2
value=$3

curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer ${api_key}" https://gw.machinist.iij.jp/endpoint -d @- << EOS
{
  "agent": "${agent}",
  "metrics": [
    {
      "name": "${name}",
      "namespace": "${namespace}",
      "data_point": {
        "value": ${value}
      }
    }
  ]
}
EOS

送信できるシェルスクリプトができたら、定期的に温度などのデータを送信するシェルスクリプトを作ります。
温度などを取得する部分はMackerel用に作ったものを流用します。

namespaceはセンサー名にしてみました。

cron_machinist.sh
#!/bin/bash

send_machinist="/opt/machinist/machinist.sh"

temp=`/opt/mackerel/bme280.sh temp | awk '{print $2}'`
humi=`/opt/mackerel/bme280.sh humi | awk '{print $2}'`
pres=`/opt/mackerel/bme280.sh pres | awk '{print $2}'`
lumi=`/opt/mackerel/luminosity.sh | awk '{print $2}'`
cputemp=`/opt/mackerel/cputemp.sh | awk '{print $2}'`

namespace="BME280"
name="temperature"
value=${temp}
${send_machinist} ${namespace} ${name} ${value}

namespace="BME280"
name="humidity"
value=${humi}
${send_machinist} ${namespace} ${name} ${value}

namespace="BME280"
name="pressure"
value=${pres}
${send_machinist} ${namespace} ${name} ${value}

namespace="TSL2572"
name="luminosity"
value=${lumi}
${send_machinist} ${namespace} ${name} ${value}

namespace="RaspberryPi3"
name="cpu_temperature"
value=${cputemp}
${send_machinist} ${namespace} ${name} ${value}

実行してみます。
(実行権も忘れずに)

$ ./cron_machinist.sh
{"message":"Succeeded"}{"message":"Succeeded"}{"message":"Succeeded"}{"message":"Succeeded"}{"message":"Succeeded"}

うまく行っているようです。
Webで確認します。

正しく送信できています。

あとはこれを定期実行するようにcronに登録します。

$ crontab -e

以下の一行を追記します。
ファイル名やパスは適宜修正してください。

*/1 * * * * /opt/machinist/machinist.sh

cronが1分ごとに定期的に実行してデータを送信します。
数分後にWebを確認してみます。

無事に1分ごとにデータが送信されています。

複数のRaspberry Piからデータを送信する

これまではRaspberry Pi3からデータを送信していました。
我が家にはもう一台Raspberry Pi Zero WHがあるので、そちらからも同様に送信してみます。

agentの部分をRaspberryPiZeroに変えて同様に設定します。

これでRaspberry Pi Zeroからのデータも確認できるようになりました。

Machinistは無料アカウントで最大10個のメトリクスを登録できます。

気温、湿度、気圧、照度、CPU温度の5つがPi 3とPi Zeroでちょうど10個となりました。

同じ種類のメトリクスを同じグラフにする

気温のデータが3とzeroで2種類ありますが、同じグラフに表示してみたいと思います。

カスタムチャートを作成するボタンを押します。

同じグラフに表示したいメトリクスを選択します。

すると同じグラフに表示されました。
比較もしやすくなりましたね。

以上、Raspberry PiのデータをMachinistでグラフ化する方法でした!

コメント

タイトルとURLをコピーしました