Androidでスマートプラグを使った過充電保護の仕組みをIFTTTは使わないで出来るだけ簡単に実現してみた

iphoneでならショートカットで簡単にできる事が、Androidでやろうとすると非常にめんどくさい。
ちょっと前はIFTTTを使うのが楽で、web上でも解説してる人はたくさんいる。
しかし今は有料のPro版でないとwebhookが使えなくなった。
Pro版はサブスクでしかも高いので、IFTTT使わないでスマートプラグのAPI直接叩く方法を考えた。
WEB上ではスマートプラグのAPIを叩いていろいろ試してる人は結構いる
けどその説明がプログラミング知識ある人前提で解説してるものばかりで難解極まりなかった。
PCとかラズパイから操作する解説が非常に多い。
ただ目的の動作を実現したいだけで、動作原理の理解とかコードの内容を勉強したいわけじゃない人にとっては敷居が高い。
いちいちPCで実行環境作るとかダルい事やってらんねーよってのが本音な人は絶対そこそこいるはず。
なので「理解しなくてもこれ真似したらいいよ」的なものを書くことにした。
こんなの出来たよ!と見せびらかすのが目的ではないので、小難しい説明はざっくりと省いてます。
スマホだけで完結できます。

スマートプラグは数多くの製品があるが、API叩いて制御するのでAPI公開してるswitchbotスマートプラグを使います。
このスマートプラグとUSB充電器を組み合わせます。
充電については有線、ワイヤレスどちらでもOk
任意の容量まで減ったら充電開始、任意の容量まで充電されたらOFF
これを延々と繰り返します。
・スマートプラグの準備
スマートプラグはスマホアプリを入れて初期設定まで済ませておきます。

制御するにはswitchbotのトークンとデバイスIDが必要なので取得します。

■トークンの取得


1.SwitchBotアプリを起動します。

2.プロフィール→設定→アプリバージョンまで進みます。

3.アプリバージョン(例えば 6.24)を数回(5回~15回)連続タップすると「開発者向けオプション」が出てきます。

4.「開発者向けオプション」をタップして、次の画面でトークン情報が出るのでそれをコピーして控えておきます。
※このトークンは絶対に他人に漏らさないでください。最悪他人に制御されてしまいます。

■デバイスIDの取得


デバイスIDはプラグのBluetoothアドレスと同じ

1.ホームからプラグミニ選択

2.右上の歯車タップ→デバイス情報

3.BLE MACと書いてある部分のアドレス(AA:BB:CC:DD:EE:FFという形式)をコピーし、:を全て削除して繋げたものがデバイスIDになる

macrodroidでマクロの作成

バッテリー容量60%で充電開始、80%で充電OFFという設定です。

充電ON側のマクロ作成

マクロを追加→トリガーの+をタップ
バッテリー/電源をタップし、バッテリー残量の変化をタップ
指定残量への増加/減少にチェック入れてOKタップ
~まで減少を選択し、その下のスライダーで60%に合わせてOKタップ
アクションの+をタップし、アプリをタップし、シェルスクリプトをタップ
非ルート化を選択し、その下にスクリプトを入れる

<deviceID>部分は取得したデバイスIDを入れる
<token>部分は取得したトークンを入れる

---------------ここから----------------
curl -X POST "https://api.switch-bot.com/v1.0/devices/<deviceID>/commands"
-H "Content-Type: application/json; charset=utf8"
-H "Authorization: Bearer <token>"
-d '{"command": "turnOn", "parameter": "default", "commandType": "command"}'
---------------ここまで----------------

タイムアウトは30秒を選択してOK押す

シェルスクリプトをタップ→条件を追加をタップ
macrodroid固有→発動したトリガーをタップ
未発動のトリガーを選択してOKタップ
バッテリー<=60%を選択してOK

充電OFF側のマクロ作成

マクロを追加→トリガーの+をタップ
バッテリー/電源をタップし、バッテリー残量の変化をタップ
指定残量への増加/減少にチェック入れてOKタップ
~まで増加を選択し、その下のスライダーで80%に合わせてOKタップ
アクションの+をタップし、アプリをタップし、シェルスクリプトをタップ
非ルート化を選択し、その下にスクリプトを入れる

<deviceID>部分は取得したデバイスIDを入れる
<token>部分は取得したトークンを入れる

---------------ここから----------------
curl -X POST "https://api.switch-bot.com/v1.0/devices/<deviceID>/commands"
-H "Content-Type: application/json; charset=utf8"
-H "Authorization: Bearer <token>"
-d '{"command": "turnOff", "parameter": "default", "commandType": "command"}'
---------------ここまで----------------

タイムアウトは30秒を選択してOK押す

シェルスクリプトをタップ→条件を追加をタップ
macrodroid固有→発動したトリガーをタップ
未発動のトリガーを選択してOKタップ
バッテリー>=80%を選択してOK

充電器について

この設定で運用する場合、充電器はなるべく電流の少ないものを選ぶ方が良いかと思います。
私の場合は5V500mAの物を使います。
理由は2つあります。
一つは、充電回数をなるべく減らすこと。
ゆっくり充電することで、充電回数が相対的に減り、バッテリーの寿命が伸びます。
2つ目の理由は発熱を抑えることです。
急速充電であればあるほど、本体が熱を持ちやすい傾向にあります。
リチウムポリマー電池は45度を超えると劣化していくと言われます。

実際の効果について

2019年5月に購入したXperia1で、この形でずっと運用し現在も稼働しています。
バッテリーの状況は購入時から83%の容量を保っており、4年9ヶ月で17%しか劣化していません。おそらく効果は絶大と思います。


この記事が気に入ったらサポートをしてみませんか?