スキップしてメイン コンテンツに移動

電池劣化を防ぐため、電源つなげっぱなしタブレットの充電制御を自動化する

要約:据え置きタブレットを常時100%充電状態にしたくない! 
ならば充放電を自動制御してやれ!


概要

よく知られているように、モバイル機器に使われているリチウムイオン二次電池は
満充電や完全放電状態が続くと電池劣化が一気に進んでしまう。

ふつうに持ち運ぶスマホであればそこまで問題にはならない。
しかし、充電器にずっとつないでおく据え置き用途のタブレットでは
ずっと満充電状態が続くため、想定以上にバッテリー劣化が進む結果となる。


うちの家ダッシュボード。常時充電ケーブルが差さっている。
機種はセールで買ったKindle Fire HD 10。


実際、常時100%充電で使っていたうちのダッシュボード端末、
最初の1台目はわりとすぐ電池劣化による膨張から使用不能となってしまった。
そんなわけで現在使用中のタブレットは2代目である。

電池膨張は使用開始1年くらいから始まって
半年ほどで液晶表示にまで影響が出るほど本体が湾曲してしまった。
こういった運用条件では電池劣化がかなり早く進んでしまうことがわかる。
この常時満充電なる毒を取り除きたい、というのが今回の趣旨である。


試してダメだった解決方法(読み飛ばし可)

  • Android本体のいたわり充電機能を使う
    • → 安い中華タブにそんな機能はついてない
    • → 機能がついていたとしても、年単位でその充電レベルが続くことを考えると、80%ですら充電のしすぎである
  • 80%オーバーに気づいたらケーブルを外し、50%を割ってたらケーブルを付ける、あたたかみのある手運用
    • → たいてい寝る前にケーブル差すの忘れて朝には電源落ちてる
  • こういうタイマー付きコンセントを使って1日を約100分割し、ON/OFF比率を微調整して充電が100%にも0%にもならないようにする
    • → 完全に充放電がバランスするデューティ比を見つけることができず、どこかで0%にタッチして電源落ちる
    • → タブレットの消費電力がなぜか多い日/少ない日があり、そこに対応できずズレていく
  • 膨張した電池は外して、AC給電専用タブレットにしちゃう
    • → 電池を取っ払ったタブレットはたとえ充電ケーブルを差していても起動しなかった
    • → 一応改造すれば電池レス起動させることもできるらしいが、電池がないタブレットは構造上横からの力に弱く割れやすくなり、上下から挟むタイプの壁マウンターでの運用は厳しいと判断した(詳しくない家族も触るしね)


うまくいった解決方法

Wifiコンセントと自動化アプリの併用により、
電池残量を「過剰でも不足でもない範囲」に常に維持する。


作業手順

1. SwitchBotプラグミニを買ってきてつなぐ

Amazonとかヨドバシで売ってるやつを適当に買う。
よくAmazonセール対象になるので、急ぎじゃなきゃ安売り待つのも手。
ちなみにSwitchBotハブは不要。プラグ単体でWifiにつながります。

WifiコンセントはSwitchBotの他にも何種類も売られているが、
APIが公開されているのはSwitchBotだけなのでブランド指名買いになる。
そして実物だが、ミニといいつつ結構でかい。
狭い場所への設置を考えている場合はあらかじめ寸法を確認しておくとよい。

ちなみにAmazonの商品ページにはなぜか定期おトク便の設定がある
トイレットペーパーみたいな消耗品扱いなのだろうか。
正直わりと耐久性&信頼性低くてすぐ壊れる物体ではある…… 
IoTは安定稼働が命なんだからもうちょいマトモな品質しててほしい……


2. プラグをAPI制御できるようにしておく

アプリから手動でON/OFFじゃなく、ネット経由で全自動遠隔操作をやっていく。
そのためにはAPIから操作ができなければならない。

まずSwitchBotのAPIトークンを発行する。
アプリバージョンを10回タップすると出てくる開発者オプションより。
Webの管理画面はなくてアプリだけで発行する、珍しいパターン。

発行したトークンを使ってSwitchBotオープンAPIリファレンス通りにcurlを叩く。

curl -X GET "https://api.switch-bot.com/v1.0/devices" \
-H "Content-Type: application/json; charset=utf8" \
-H "Authorization: Bearer {TOKEN}"
まず上記のようにして登録済みのデバイスIDを取得する。

curl -X GET "https://api.switch-bot.com/v1.0/devices/{DEVICE_ID}/status" \
-H "Content-Type: application/json; charset=utf8" \
-H "Authorization: Bearer {TOKEN}"
次にIDに対応するプラグの状態を確認してみる。
今ONですよとかコンセント電圧は101.4ボルトですよとか言ってくる。

curl -X POST "https://api.switch-bot.com/v1.0/devices/{DEVICE_ID}/commands" \
-H "Content-Type: application/json; charset=utf8" \
-H "Authorization: Bearer {TOKEN}" \
-d '{"command": "turnOn", "parameter": "default", "commandType": "command"}'
curl -X POST "https://api.switch-bot.com/v1.0/devices/{DEVICE_ID}/commands" \
-H "Content-Type: application/json; charset=utf8" \
-H "Authorization: Bearer {TOKEN}" \
-d '{"command": "turnOff", "parameter": "default", "commandType": "command"}'
そして上のようにプラグをON/OFFしてみる。
アプリを使わずともAPIだけでON/OFFができることを確認すること。


3. 充電器をSwitchBotプラグに差す

[コンセント] → [SwitchBotプラグ] → [充電器] → [タブレット]
みたいにする。

※延長コードに差す場合は極性プラグ対応のやつを用意すること。


4. 自動化アプリをセットアップ

「電池残量に応じて所定の動作を自動で行う」ためのアプリを入れる。
ここでは調べて一番目に出てきたMacroDroidを使っている。

iOSアプリはよくわかんないので各自ググってくれ。
でも据え置き放置用途ごときにiPadのハイスペックを腐らせるのはもったいないし、安い中華Androidタブ使うのが丸いとは思います。


セットアップ内容はこんな感じ:

ここでは3つのマクロを定義している。

「充電60」「放電50」がメイン。
この2つで50%~60%の間に電池残量を維持する。
60%まで充電されたらプラグをOFFにし、50%まで放電したらプラグをONにするだけ。

SwitchBotプラグがAPIリクエストに反応しなかったときのため「緊急バッテリ節約」も用意してある。
過放電により一気に電池劣化が進むことを避けるべく、残量20%以下になったら問答無用でスリープに入れてしまうようにした。


5. 各マクロの中身を作る

マクロ「充電60」の中身は下のスクショのようなかんじ。
「放電50」はこれの不等号が逆なだけバージョンと思ってもらえればよい。


ここのトリガーには「バッテリー残量が指定の値になったら」みたいなのもある。
けど残量が変化したとき毎回マクロが呼ばれて条件節評価してもらう方が
確実に動作してくれそうなので、上記の形に落ち着いた。


アクションの中身は説明がめんどいのでスクショだけ貼っときます。
これで察して。


2で用意したcurlを再現するだけで特に難しくはないはず。


6. 画面常時ONを設定

MacroDroidとはまた別のアプリを利用して画面常時ONを実現する。
※今回は充電ONとOFFを繰り返す構成なので、Android本体機能の「充電中はスリープしない設定」はマッチしない

そのものずばり自動スリープ防止というアプリがあるので利用する。
こいつは特定のアプリがフォアグラウンドにいるときだけ、自動でスリープに入るのを防いでくれる便利なやつ。
家ダッシュボード表示に使っているのはOperaブラウザ。だからOperaを自動スリープ対象から外す。

ちなみにOperaにした理由はOperaでだけ全画面表示ができたから。
Chromeではできない。
めっちゃ基本機能だと思ってた全画面表示、意外とマイナーだった。


7. しばらく動かしてみて様子をみる

Battery Mixを使って電池残量の記録を取る。
うまくできていれば、以下のようになる。

50-60%範囲内で完璧な充電制御やってるところ

これでどのくらい電池長持ちするかはわからないけど
常時100%の先代よりは確実に良いはず。


ノーパンッソソソにも適用できないか?

同じような仕組みをノーパソの充電用にも構築できないかなって考えてます。

ただノーパソの場合、スリープや電源OFFの時間が長く
タブレットのようにいつでも電池残量取得できるわけじゃないのが問題。
あげく深夜勝手に起動してアップデートかけてたりするし。

いまはアイデアが下りてくるの待ち中。
モダンスタンバイをうまく使えれば……? いやー?


コメント