電力測定をする際に電流量測定のモジュールを使ってみようかと思ったところスイッチボットシリーズのスマートプラグで消費電力などを計測できることを知ったので試してみました。
obnizを使うことでJavaScriptで電力測定ができます。
SwitchBotプラグミニ
スマートホーム的な何かをやれるコンセントです。
結構安い。スマホからオンオフできて便利。
obnizのパーツライブラリにもある
obnizからこのプラグにアクセスできるとのことで、BLEを使って情報にアクセスできる模様です。
サンプル動かしただけでエラーなくいけました。
コピペで動くコード
ライブラリのインストールから。ライブラリ(obniz JS v3.30.1)で試しています。
$ npm init -y
$ npm i obniz
IDだけ書き換え、以下のコードでファイルを作成して実行します。
const Obniz = require("obniz");
const obniz = new Obniz("1234-5678"); //自身のIDに書き換え
obniz.onconnect = async function () {
// Javascript
const Switchbot_PlugMini = Obniz.getPartsClass("Switchbot_PlugMini");
await obniz.ble.initWait();
obniz.ble.scan.onfind = async (peripheral) => {
if (Switchbot_PlugMini.isDevice(peripheral)) {
console.log(Switchbot_PlugMini.getData(peripheral));
}
};
await obniz.ble.scan.startWait(null, {duplicate: true, duration: null});
}
実行
$ node app.js
実行結果は以下のような感じです。
obnizのドキュメントを見ると以下のようなパラメータが取れそうでした。sequenceNumber
とalreadsySyncTime
がイマイチなんの値か現状分かってないです。調査不足。
- sequenceNumber: なんだろう...
- powerState: プラグがオンかオフか
- hasDelay: 遅延実行がオンになっているか
- SwitchBotの機能でそういうのがあるぽい
- hasTimer: タイマーがセットされているか
- SwitchBotの機能でそういうのがあるぽい
- alreadsySyncTime: なんだろう...
- wifiRssi: Wi-Fiの電波強度
- overload: オーバーロード、高負荷状態
- power: 消費電力
ちゃんと取れてるかの確認
アプリでの表示とNode.jsのコンソール上での比較をすると
同じタイミングのスクショですが、アプリ上の電力って値が12.5
WでNode.jsのターミナルでのpowerの値が12.5
ということで一致していますね。
コンセントの(デバイス)接続数でちゃんと数字変化
↑はプラグの先にMacBookとiPhoneを充電している状態で12.5Wという表示でした。
- MacBookだけだと6.8W
- 何も接続していないと0W
純正のAppleのアダプターを使っているからかもしれないですがちゃんと0Wになるのすごいですね。
現状obnizからOn/OFF制御はできないっぽい
SwitchBot側の(Bluetoothの)APIが開いてない可能性もありますが、現状obniz側からは電力などの情報取得しかできないみたいです。
getData()のメソッドだけで何ができるか検討してみたいと思います。