AWS Lambda ( Go )でNatureRemoのセンサー情報をMackerelで可視化・監視して、アラートをLINEに通知してみた
- やったこと
- ソースコード ( GitHub )
- NatureRemoについて
- まずはAPI ( curl ) でデバイスのセンサー情報を取得する
- Goでデバイスのセンサー情報を取得する
- Mackerelにカスタムメトリクスを投稿する
- AWS LambdaにGoコードをデプロイしてMackerelにデータを投稿する
- Mackerelにメトリクスを投稿した結果
- NatureRemoの値をMackerelで監視・LINE通知した結果
- まとめ
やったこと
NatureRemoはテレビやエアコンなどの家電を登録すると赤外線通信で制御ができる。私の場合は、主にテレビの操作をスマホでしたかった & NatureRemoを利用してGoで開発するために買ってみた。
- AWS Lambda + Mackerel + Go でNatureRemoのセンサー情報を可視化する
- 気温・湿度・照度をグラフ化する
- メトリクスを監視してLINEにアラート通知をする
ソースコード ( GitHub )
NatureRemoについて
- NatureRemoとは
- local-api
- アクセストークン発行
- NatureRemoのAPI-Keyを取得する
まずはAPI ( curl ) でデバイスのセンサー情報を取得する
APIのエンドポイント(URL)
https://api.nature.global/1/devices
curlで取得する
curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -k --header "Authorization: Bearer <TOKEN>"
■ response結果
[ { "name":"リビング", "id":"XXXXX", "created_at":"2019-04-20T12:49:11Z", "updated_at":"2019-04-26T14:35:59Z", "mac_address":"XXXXX", "serial_number":"XXXXX", "firmware_version":"Remo/1.0.77-g808448c", "temperature_offset":0, "humidity_offset":0, "users":[ { "id":"XXXXX", "nickname":"XXXXX", "superuser":true } ], "newest_events":{ "hu":{ "val":40, "created_at":"2019-04-27T04:34:06Z" }, "il":{ "val":234.6, "created_at":"2019-04-27T05:20:55Z" }, "te":{ "val":26.39, "created_at":"2019-04-27T04:38:10Z" } } } ]
■ 温度を取得する
curl -sS -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -k --header "Authorization: Bearer <TOKEN>" | jq '.[].newest_events.te.val' > 22.79
■ 湿度を取得する
curl -sS -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -k --header "Authorization: Bearer <TOKEN>" | jq '.[].newest_events.hu.val' > 50
Goでデバイスのセンサー情報を取得する
■ 以前のブログで記載済み
Mackerelにカスタムメトリクスを投稿する
■ mackerel-client-goを利用して取得データ(気温・湿度・照度)を投稿する。
■ GoでMackerelにメトリクスを投稿する方法は別の記事で記載済み
■ 気温を指定したサービスに投稿する部分を抜粋 ( main.go )
// Post Temperature err_tem := client.PostServiceMetricValues(serviceName, []*mackerel.MetricValue{ &mackerel.MetricValue{ Name: "Temperature.temperature", Time: nowTime.Unix(), Value: tem, }, }) if err_tem != nil { fmt.Println("Error post tem") }
AWS LambdaにGoコードをデプロイしてMackerelにデータを投稿する
AWS Lambdaを作成する
- Lambdaの設定
■ MackerelのAPI-KEYをLambdaの環境変数にセットする。
- MackerelのAPI-KEYを確認する。
■ Lambdaのランタイム・ハンドラと環境変数
■ main.go ( 一部抜粋 )
var ( url = "https://api.nature.global/1/devices" token = os.Getenv("REMOTOKEN") mkrKey = os.Getenv("MKRKEY") client = mackerel.NewClient(mkrKey) )
■ CloudWatch-Eventで定期実行させる
スケジュール式: rate(3 minutes)
を設定する
awsコマンドでLambdaにGoコードをデプロイする
$ git clone https://github.com/yhidetoshi/natureRemo-mackerel $ cd natureRemo-mackerel $ make setup cross-build $ zip -j deployment.zip ./build/pkg/main_linux_amd64/main $ aws lambda update-function-code --function-name ${LAMBDA_FUNCTION_NAME} --zip-file fileb://deployment.zip --region ap-northeast-1
※ aws-cliが実行できる必要があります。/ ${LAMBDA_FUNCTION_NAME}
に関数名をセットする。
Mackerelにメトリクスを投稿した結果
NatureRemoの値をMackerelで監視・LINE通知した結果
■ LINEに通知するチャンネルを作成
■ Mackerelで監視ルールを作成
■ アラートを発生させてLineに通知を送った結果
まとめ
NatureRemoのセンサー情報である温度、湿度、照度を AWS LmabdaとMackerelとGoを使って可視化・監視する方法を紹介しました。MackerelはFreeプランなので、24時間までしかデータを残せないですが、監視もできるし、1日の変化を確認できるので十分です。今回はAWSのLambdaを利用しましたが、cloud-functionやGAEなどGoogle Cloudのリソースを利用して実行させてみたいと思います。