記事の内容を試す場合は自己責任でお願いいたします。
- Raspberry Pi Zero WH OSインストール
- Raspberry Pi Zero WHを使ってAmazon Echo Flexから音を出す
- Raspberry Piと赤外線LEDで家電を操作する
- Raspberry PiとBME280を利用して気温、湿度、気圧を測定する
- Raspberry Pi Zero WHにMackerelを導入して死活監視を行う
- Raspberry Piで照度を取得する TSL2572 TSL2561
- AlexaからRaspberry Piを経由して家電を音声で操作する
- AlexaをRaspberry PiのNodeREDから喋らせる
- Raspberry PiとAlexaでオリジナルスキルを作る 「今日のご飯は?」
- Raspberry Pi とSlackとLINE Messaging APIでLINEから家電を操作する
- Raspberry Piで収集したセンサー情報をMachinistに送信する
- Raspberry Piを使ってAlexaからゴミの日のお知らせをする
- Raspberry Piでダイソーのリモートシャッターを使う
- 2台のRaspberry PiとMySQLでレプリケーションを構成する
- iPhoneからRaspberry Piを経由して家電を操作する
- Raspberry PiでWebサーバを立ててブラウザから家電を操作する
Machinistで気温、湿度、気圧、照度、CPU温度などを管理する
これまでRaspberry Piで取得した気温データなどはMackerelで管理していました。

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

Machinistに登録する
まずは上記サイトからアカウントを登録します。
APIキーを取得する
アカウントを登録し、ログインができたら右上のメールアドレスの部分からアカウント設定を選択します。

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

Raspberry Piでシェルを作成する
Machinistのメトリクスはエージェントの導入など不要で、curlコマンドで簡単に送信することができます。
サンプルを参考にしながら適当にシェルを作成します。
#!/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を見てみます。

無事に送信が確認できました!
自動的にデータを送信する
少しシェルスクリプトを修正します。
コマンドライン引数からメトリックの設定をできるようにします。
#!/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はセンサー名にしてみました。
#!/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でグラフ化する方法でした!
コメント