TP-Link の Tapo P105 に Zephyrus の 250W ACアダプタをつないで,Zephyrus のバッテリー残量を監視して自動的に充電開始/終了するスクリプトを書いた.
普段は Thunderbolt 経由で給電しているのだけど,Zephyrus は ThinkPad と違って消費電力が大きいようで,GPUを特には使わない通常の作業をしているだけでじわじわじわじわとバッテリー残量が減っていく.
130W ACアダプタ Thunderbolt 給電だと,給電が消費電力に追いついていない感じ.
半日以上続けて使う場合は,付属の 250W ACアダプタを接続するのは必須のようだ.
かといって,250W ACアダプタにいつも通電させておくのはなんだか電気の無駄使いをしているような気もする… .
ということで,スクリプトを書いた.
スクリプトは,
充電をしていないとき:
バッテリー残量が 20% 以下になったら Tapo P105 を On にして充電開始
充電をしているとき:
バッテリー残量が 98% 以上になったら Tapo P105 を Off にして充電終了
バッテリー残量の監視間隔は,15分
というふうにした.開始/終了のバッテリー残量値や,監視間隔はあとで調整するかもしれない.
バッテリー残量を調べる方法はいくつかあるけれど,なるべく汎用性のある方法にしたかったので,
powercfg /batteryreport /xml /output battery_report.xml > /dev/null
として,battery_report.xml を解析する方法にした.
簡単にできるつもりだったのだけど,名前空間あり XML の Python での解析に手間取って 3時間くらいかかってしまった.
「ElementTreeやlxmlで名前空間を含むXMLの要素を取得する – orangain flavor」
https://orangain.hatenablog.com/entry/namespaces-in-xpath
「Pythonで名前空間付きのXMLを操作する(ElementTree) – Qiita」
https://qiita.com/yuki2006/items/d84b37f07b70d02c5504
たとえ名前空間が 1つだけしかない XML でも,要素ひとつひとつに名前空間をベタに書かないとだめっぽい.むーん.
たとえば,3階層下の要素にアクセスしたいときは,名前空間を 3回も書くことになる.むーん.
名前空間をラベル化(ハッシュ化)して短く書くことはできるけれど,メンテナンス性というか見かけ上はあんまり変わらないなぁ.
まぁ,名前空間ってそういうものではあるのだけどさー,「いま処理対象にしている名前空間」を動的に設定できて,切り替えて使えるようになっているといいなぁ,と思う.
私がわからなかっただけで,ホントはできるんじゃないかなぁ… .
とりあえず,スクリプトはできた.
意図どおりに動いているような感じ.
スクリプトを動作させ続けて様子を観察すると,
充電していない時間: 5~10時間
充電している時間: 1時間強
だった.
バッテリーの劣化との兼ね合いもあるけれど,大部分の時間は充電をしていなくて,充電時間は 1時間強で済んでいるのだから,やっぱり,250W ACアダプタにいつも通電させておくのは電気の無駄使いのような気がする.
ということで,Tapo P105 による 250W ACアダプタ制御は意義がありそう.ばんざい.
このスクリプトは動作確認をするためだけのもので,本来はタスクトレイに常駐する C#アプリを作るつもりでいたのだけど,もうこれでいいか… .
なんか,くたびれてしまった… .
==
2022年9月16日
TP-Link のスマートプラグ「Tapo P105」も,初期設定さえ済ませておけば,外部ネットワークのサービスを使わずにローカルネットワーク用の制御ツールで On/Off 制御できました.
https://noike.info/wp/knoike/2022/09/16/84744/
2022年7月27日
普段使いのPCが唐突にだめになってしまったので,急遽,新しくPCを購入しました.新しく買った PC は ASUS の ROG Zephyrus M16 で,RTX3070 が載った機種にしました.
https://noike.info/wp/knoike/2022/07/27/84707/