スマートプラグでスマホの満充電を避ける「いたわり充電」の実現 (KASA(HS105) + IFTTT + MacroDroid)
スマホに使われているリチウムイオン電池(Li-ion)は、満充電(100%近く)、過放電(0%近く)の状態にすることで、劣化が早まります。*1
この満充電状態を避けるため、「いたわり充電」(例えばXperiaでは満充電時間を極力短くする機能、ノートPCなどでは80%などで充電を停止する機能)が搭載されていたりします。 *2
この「いたわり充電」機能を、スマートプラグを用いて実現しようという話です。
材料
機材
- スマホ本体: Xiaomi Redmi 10 Pro (MIUI 12.5.1) ※非Root
- スマートプラグ(KASA): TP-Link HS105
アプリ
- Kasa
- IFTTT
- MacroDroid
これまでの経緯
この「満充電手前で充電を止める」ことを、これまで半手動で行っていました。具体的には、
こういうタイマーを使って、就寝時にバッテリーの残りを見て、85~90%位になるようにタイマーをセットして充電していました。
これまでメインで使っていた、Xiaomi Mi9 Lite は、ちょうど使っている充電器との兼ね合いで 「1%=1分」でかなり正確に充電できていたため、計算が簡単でしたが、最近メインのスマホを Xiaomi Redmi 10 Pro に変えたため、計算が「1%=1分ちょい」になり、面倒になっていました。
以前から、端末内では電池残量が % 単位で取得できるのだから、これを元に電源を外部から制御できれば、自動化できるのになあ、、、と思っていたのでした。
スマートプラグ
わらしべプロトコルで入手したポイントで、このスマートプラグを購入しました。
HS105 | Wi-Fi スマートプラグ 遠隔操作 直差しコンセント Echo シリーズ Google Home 対応 音声コントロール コンパクト ハブ不要 3年保証 | TP-Link 日本
単体でWiFiに接続し、アプリを使って外部からAC100Vのオン/オフ制御が可能になります。
なお、物理ボタンでの手動オン/オフや、あらかじめアプリから設定しておけば、スケジュール動作やタイマー動作が可能です。
・・・だからと言って、タイマー動作を毎回セットするのであれば、これまでのダイヤル式の方がまだ楽です。
「スマート」というからには、アプリ制御をしたいわけですが、公式に「IFTTTに対応」と書かれており、実際、IFTTTの「Then」での動作は非常に簡単に設定が可能です。
試みたこと
IFTTT のみで完結させる(※無理)
IFTTTには、トリガとしてバッテリー関係のものがありますが、「充電開始時」「充電終了時」「残量が15%に下がった時」のわずか3種類しか使えません。
やりたいのは、 80%まで充電した時 等なので、残念ながら不可能(トリガがかけられない)です。
別のアプリで充電状況を監視し、通知を介してIFTTTを起動(※なぜかうまくいかない)
ググって調べたところ、同様のことを考えている先人の方がおり、通知を介してIFTTTを起動するというアイディアがありました。
- AutomateIte でバッテリーの%が設定値を超えたら通知を出す → IFTTTの「Notification received from a specific app」でトリガをかけ、KASAをTurn OFF
- AccuBattery で充電完了の通知を出す → 同上
しかしながら、なぜか、どうしても IFTTT が起動してくれない。IFTTTの自動起動やバッテリー最適化関係、通知の読み取り権限などもきちんと与えているのだが、何故かうまく行かない。ここで4日くらい進まない状態になっていました…。
上記を紹介しているWebページや、Youtube動画ではうまくいっているので、環境(端末?)のせいなのではないかと思います。なので、きちんと動く場合はこれでOKのはず。
IFTTT で Webhook をトリガに Turn Off するレシピを作っておいて、MacroDroidでバッテリーを監視し、URLを叩いて Turn Off する。(※これで動作した)
を読めば終了ですが、意外と日本語の情報が少ない(?)ので少し丁寧に解説します。
手順の詳細
- スマートプラグの設定しておく … アプリ Kasa が使える状態に
- IFTTT に Webhook をトリガとしたレシピを作成
- 私の場合は、Offにするレシピと、Onにするレシピの2つを用意しておきました。(動作ごとにレシピを作っておく)
- 「THIS」に「Webhook」の「receive a web request」を設定。 Event Name は、たとえば "TurnOff" とかにしておく。
- 「That」に「TP-Link KASA」の「Turn off」を指定。
- 以上で、特定のURLにアクセスすることで、電源をオフ(Turn off)にすることができるようになります。
- 私の場合は、Offにするレシピと、Onにするレシピの2つを用意しておきました。(動作ごとにレシピを作っておく)
- トリガをかけるURLの取得
- https://ifttt.com/services/maker_webhooks/settings にアクセスする(※IFTTTのアカウントでログインした状態で)
- 「https://maker.ifttt.com/use/???????????????」の 「use/」以降、ここでは 「???????????????」と書いている部分が KEY になります。
- 「https://maker.ifttt.com/trigger/{EVENT}/with/key/{KEY}」で、IFTTTのトリガをかけることが出来ます。
- 例えば「https://maker.ifttt.com/trigger/TurnOff/with/key/???????????????」という感じです。
- 別の Event Name を設定しておけば、KEY は変わらないので、上記の TurnOff 部分だけ書き換えてやればOKです。
- MacroDroid で、バッテリー状態をトリガに、上記URLへアクセス(HTTP GET)するマクロを書く
- トリガーに、「バッテリー/電源」-「電池残量の変化」-「指定残量への増加/減少時」「~まで増加、90%」を設定 (※90%は任意)
- アクションに、「アプリ」-「Webサイトを開く/HTTP GET」で、
- URL: 上記で得た 「https://maker.ifttt.com/trigger/TurnOff/with/key/???????????????」
- HTTP GET (Webブラウザ不使用) のみにチェック。
- お好みで、「通知」-「通知を表示」なども追加しておく。
…以上です。IFTTTで、URLを叩けば動作する Turn on / Turn off のレシピを作っておけば、いろいろ応用がききそうです。
なお、IFTTT、MacroDroidの自動起動設定、バッテリーの最適化「無し」は設定しておいたほうが良さそうです。
・・・っていうか、やりたいことは物凄くシンプルなのに、なんでこんなに大掛かりなことになるんだろう、、、。 ”電源イベント→外部のURLに接続→WebhookでIFTTTのトリガがかかる→KASA使ってスマートプラグをOFF”って、なかなかに壮大だ…。 目の前のAC100VをOFFにしたいだけなのに、ネット接続必須だし。 (電源が接続されていても、充電をOFFにできるAPIがあれば、一瞬で解決するのに、、、。)
※「技術」カテゴリを新設。しかし、カテゴリの整理も必要になってきたなあ・・・。
MacroDroid、かなり面白そうなので、次にこれ関係の記事を書こうと思います。 特にXiaomi機(MIUI環境)特有の問題があったので、その辺を重点的に書ければと考えています。
*1:従来の二次電池(充電式の電池)である、ニッケルカドミウム電池(Ni-Cd)やニッケル水素電池(Ni-MH)では、継ぎ足し充電によるメモリー効果メモリー効果 - Wikipedia抑制のために、完全に使い切ってから(終止電圧まで放電したから)充電するのが良かったし、そのための「リフレッシュ機能」などもあったため、スマホのバッテリーも同様に考えている方も未だに多い印象があります。Li-ionでは全くメモリー効果は考えなくてよい(=使い切る必要はない)し、例えばスイッチを切って長期保存する場合は、50%程度を維持するように、たまに充電をする、というのが劣化を最低限に抑える方法です。
*2:個人的なこれまでの経験上でも、過放電もかなりダメージが大きいです。通常、その前に自動的にシャットダウンしてしまいますので大丈夫ですが、長期保存する場合は注意が必要です。