スイッチボットスマートプラグをワットチェッカーとして使う

スイッチボットスマートプラグ PC/デジモノ

デスクライトのON/OFFをするためにIOTコンセントスイッチ(スイッチボットプラグミニ)を購入したのですが、ワットチェッカーの機能がついていることを後で知りました。

ワットチェッカーは単品で買うと意外と高いです。しかも専用アプリでないとデータを読み出せなかったり、本体の画面に表示するだけだったりと使い勝手がイマイチなものが多いです。

スイッチボットのプラグミニはアプリから使用状況が確認できるだけではなく、公式APIが用意されていてLinuxマシンなどを使ってデータを吸い出すこともできるようなので遊んでみました。

アプリで確認・設定できること

専用アプリで確認できるのは以下の4点

  • 現在の電力、電流、電圧
  • 今日の消費電力量、使用時間
  • 昨日の消費電力量
  • 履歴

一方、操作設定は以下の3点

  • 電源のON/OFF
  • スケジュール設定
  • 遅延実行

電源のON/OFFは即時ですね。トグル式です。

スケジュールは時間指定で設定できます。一度だけか繰り返しかの2択で、曜日指定は出来ないようです。複数のスケジュールも登録可能です。

遅延実行は設定した時間後にONorOFFする機能です。現在ONなら設定時間後にOFF、現在OFFなら指定時間後にONです。

公式APIでデータの読み出し

ここからが本番。公式APIを使ってLINUXのコマンドラインから確認・設定を行います。詳細は公式を見てください。

GitHub - OpenWonderLabs/SwitchBotAPI: SwitchBot Open API Documents
SwitchBot Open API Documents. Contribute to OpenWonderLabs/SwitchBotAPI development by creating an account on GitHub.

トークンの取得

アプリの[プロフィール]を開き、設定を開きます。

2024.09.13追記:アプリのアップデートで少々場所が変わっているようです。
下記画面に[基本データ]という項目が追加されていますので、それを開いてください。
その中に[アプリバージョン]があります。

[アプリバージョン]を連打すると[開発者オプション]という項目が出現します。

この中の、[トークンを取得]の下にある長い文字列をコピーしてください。

[クライアントシークレット]については今回は無視でOKです。

上記2つの文字列は絶対に人に知られないようにしてください。漏れてしまった場合はトークンのリセットを行ってください。

これで準備が整いました。

デバイスIDの確認

なくても良いのですが、可読性が上がるのでjQueryをインストールします。

$sudo apt install jq

次にスクリプトを作成します。

$emacs swb_devicelist.sh
token="ahogehogehogehogehogehogeehoge45"
auth="Authorization:${token}"
url="https://api.switch-bot.com/v1.0/devices"

curl -H "${auth}" "${url}"
$chmod 770 swb_devicelist.sh

スクリプト内のtoken=に続く部分は先に取得した文字列を設定してください。

また、今回はAPIのバージョン1.0を使用するのでurlでv1.0を指定しています。最新版はv1.1で、扉ロックデバイスも扱えるようになったようです。ただ、認証手続きが煩雑になっているため、今回はv1.0を使います。

作成したスクリプトを実行します。(jqを使って整形します)

$ ./swb_devicelist.sh  |  jq .

すると以下のような感じで出力が出ると思います。

{
  "statusCode": 100,
  "body": {
    "deviceList": [
      {
        "deviceId": "6AAAAAAAAAAA",
        "deviceName": "プラグミニデスクライト",
        "deviceType": "Plug Mini (JP)",
        "enableCloudService": true,
        "hubDeviceId": ""
      },
      {
        "deviceId": "7AAAAAAAAAAA",
        "deviceName": "2階ライト",
        "deviceType": "Plug Mini (JP)",
        "enableCloudService": true,
        "hubDeviceId": ""
     },
     {
        "deviceId": "CAAAAAAAAAAA",
        "deviceName": "Hub Mini 01",
.....

出力の中から、操作したいデバイスのデバイスIDを探してメモしておいてください。

API使用方法

コマンドの実行

ここまでで、トークンとデバイスIDがわかりました。次に、対象のデバイスを操作するスクリプトを作成します。(省きますが実行権限の付与はお忘れなく)

$emacs swb_cmd.sh
#!/bin/bash
token="ahogehogehogehogehogehogeehoge45"
deviceid="6AAAAAAAAAAA"
auth="Authorization:${token}"
type="Content-Type: application/json"
cmd='{"command": "turnOn"}'
url="https://api.switch-bot.com/v1.0/devices/${deviceid}/commands"

curl -H "${auth}" -H "${type}" -d "${cmd}" "${url}"

これでプラグがオンになるはずです。

スクリプト中の青色部分をturnOffとすればオフにできます。

状態の確認

同様にスクリプトを作成します。

$emacs swb_sts.sh
#!/bin/bash
token="ahogehogehogehogehogehogeehoge45"
deviceid="6AAAAAAAAAAA"
auth="Authorization:${token}"
url="https://api.switch-bot.com/v1.0/devices/${deviceid}/status"
curl -H "${auth}" "${url}"
$./swb_sts.sh | jq .

実行すると以下のような出力が得られます。

{
  "statusCode": 100,
  "body": {
    "deviceId": "6AAAAAAAAAAA",
    "deviceType": "Plug Mini (JP)",
    "hubDeviceId": "6AAAAAAAAAAA",
    "power": "on",
    "voltage": 102.7,
    "weight": 18.2,
    "electricityOfDay": 243,
    "electricCurrent": 0.253
  },
  "message": "success"
}
  • “power”はデバイスのON/OFF状態
  • “voltage”は電圧(V)
  • “weight”は現在の消費電力(W)
  • “electricityOfDay”は今日の使用時間(分)
  • “electricCurrent”は現在の電流(A)

となっています。それぞれの数値だけを取り出したい場合はJQueryを使えばOKです。

ただし、electricityOfDayについてはアプリで表示される時間と結構ズレがあるので注意です。ここの原因はよくわかりません。

まとめ

スイッチボットプラグミニを使用して遊んでみました。

APIを使えば簡単なスクリプトで操作、消費電力などを確認できることがわかりました。ただ、使用時間がアプリと大きくズレていたり、瞬間の電力等は把握できるものの積算値は取得できませんでした

APIの使用は1日1000回までなので、短時間間隔でデータを呼び出して積算値を算出するのもちょっと厳しいような気がします。(1デバイスだけなら約90秒間隔でとれるので出来ないこともないですが…)

とはいえ、アプリを使えば積算値は確認できますし、ワットチェッカーとしては格安であることは変わらないので、使っている機器の電力を確認するのにオススメです。

コメント