最近電気代高いですね。先日北海道電力が32%の電気料金の値上げを申請したらしいです。私は北海道住まいなのでクリティカルヒット。節電意識を持った方がよさそうなので、どれくらい電気を使ってるかモニタリングできるようにしたいと思います。
やりたいこと
SwitchBot プラグミニから電気の使用状況を取得 → Mackerelに流す
ひつようなもの
- SwitchBot プラグミニ
- Mackerelアカウント
- 適当なマシン
- curlとjqが必要です。インストールされていなかったらインストールを
SwitchBotの設定
以前、コマンドからSwitchBotを操作する記事を書きました。
「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でアカウントを持っていない方はユーザー登録をしておいてください。今回の用途だとプランは「無料トライアル」で十分です。
左メニューから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の温湿度計も家にあるので、そのうち集約したらブログ記事にします。
