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でグラフ化する方法でした!
コメント