とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

自宅の電気使用状況をMackerelでモニタリング

最近電気代高いですね。先日北海道電力が32%の電気料金の値上げを申請したらしいです。私は北海道住まいなのでクリティカルヒット。節電意識を持った方がよさそうなので、どれくらい電気を使ってるかモニタリングできるようにしたいと思います。

やりたいこと

SwitchBot プラグミニから電気の使用状況を取得 → Mackerelに流す

ひつようなもの

  • SwitchBot プラグミニ
  • Mackerelアカウント
  • 適当なマシン
    • curlとjqが必要です。インストールされていなかったらインストールを

SwitchBotの設定

以前、コマンドからSwitchBotを操作する記事を書きました。

devops-blog.virtualtech.jp

「SwitchBotの設定」を済ませ、deviceIdを取得しておきます。

token='メモしたトークン'
secret='メモしたクライアントシークレット'
t=$(date +%s%3N)
nonce=$(uuidgen)
sign=$(echo -n "$token$t$nonce" | openssl dgst -binary -sha256 -hmac "$secret" | base64)
curl -Ss -H "Authorization: $token" -H "t: $t" -H "nonce: $nonce" -H "sign: $sign" https://api.switch-bot.com/v1.1/devices \
    | jq '.body.deviceList[] | select(.deviceType != null) | select(.deviceType | contains("Plug Mini"))'

Mackerelの設定

Mackerelでアカウントを持っていない方はユーザー登録をしておいてください。今回の用途だとプランは「無料トライアル」で十分です。

ja.mackerel.io

左メニューからServicesを選択して、サービスを新規作成をポチります。

適当なサービス名をいれて、作成をポチ

オーガニゼーションの詳細ページAPIキータブからAPIキーを取得できるのでコピーしておいてください。

以下のコードをput-metrics.shというファイルに保存します。switchbot_mackerel_プレフィックスのある変数はコピーした値を代入する必要があるので、適所変更してください。

#!/bin/bash

switchbot_token='SwitchBotの設定で取得したトークン'
switchbot_secret='SwitchBotの設定で取得したシークレット'
switchbot_device_id='SwitchBotの設定で取得したdeviceId'

mackerel_service_name='Mackerelで作成したサービス名'
mackerel_api_key='MackerelのAPIキー'

t=$(date +%s%3N)
sign=$(echo -n "$switchbot_token$t$nonce" | openssl dgst -binary -sha256 -hmac "$switchbot_secret" | base64)
jsonstr=$(curl -Ss -H "Authorization: $switchbot_token" -H "t: $t" -H "nonce: $nonce" -H "sign: $sign" https://api.switch-bot.com/v1.1/devices/$switchbot_device_id/status)

volt=$(echo "$jsonstr" | jq -r '.body.voltage')
watt=$(echo "$jsonstr" | jq -r '.body.weight')
amp=$(echo "$jsonstr" | jq -r '.body.electricCurrent')
epoch=$(date +%s)

data=$(mktemp)

cat <<EOF > "$data"
[
  {
    "name": "$switchbot_device_id.Volts",
    "time": $epoch,
    "value": $volt
  },
  {
    "name": "$switchbot_device_id.Watts",
    "time": $epoch,
    "value": $watt
  },
  {
    "name": "$switchbot_device_id.Amps",
    "time": $epoch,
    "value": $amp
  }
]
EOF

curl -Ss -X POST \
     -H "X-Api-Key: $mackerel_api_key" \
     -H 'Content-Type: application/json' \
     -d "@$data" \
     https://api.mackerelio.com/api/v0/services/${mackerel_service_name}/tsdb

rm -f "$data"

実行権限をつけます。

chmod +x put-metrics.sh

実行してみて{"success":true}という文字が出力されたら成功です。このツールを定期実行することで、Mackerelにデータを蓄積してくことができます。

まとめ

SwitchBotはAPIを公開してるので一部の機種ではcurlから操作できます。SwitchBotの温湿度計も家にあるので、そのうち集約したらブログ記事にします。