
ノートPCのバッテリーの過充電防止をコンセントでできないかな?
都合良く充電されたらオフにして、バッテリーがなくなったらオンになるようにしたい!
こんな風に思っていませんか?
ノートPCのACアダプターを繋ぎっぱなしで使用している方も多いと思います。しかし、繋ぎっぱなしだとバッテリーの劣化を早めることになり、バッテリー持続時間の低下などを引き起こします。
その対策としてバッテリーを満充電状態で使い続けるのではなく、80%で充電を止めると良いと言われています。また、0%まで使い切るのではなくある程度の残量で充電を始めるのが良いとも言われています。理想は50%で使い続けるなんてことも見聞きしますよね。
PCによってはACアダプターを繋ぎっぱなしでもバッテリー残量に応じて充電を制御してくれる機能を備えているものもありますが、私が持っているPCはありませんでした。。。
そこで、同じようなことをスマートプラグというコンセントで実現してみました!
- ノートPCのバッテリーをスマートプラグでコントロールする方法
- 40%未満になったら充電を開始して、80%以上になったら充電を止めるしくみ
システムの概要
今回はPCのバッテリー残量をHome Assistant上で管理し、残量が40%を下回ったらスマートプラグをオンにして充電を開始、残量が80%まで回復したらスマートプラグをオフにして充電を止めるような設定を行っていきます。
PCのバッテリー残量はMQTTを使ってHome Assistantに送信します。Home AssistantではそのMQTTを受信してセンサー値として保持し、オートメーションで残量に応じてプラグのオン/オフを切り替える設定をしていきます。

使用するもの
今回使用するものは以下のモノです。
Home AssistantはRaspberry Pi上に構築するのがおすすめです。具体的なやり方についてはこちらに記載しています。

スマートプラグはHome Assistantで扱えるものであれば問題ありません。例えば、SwitchBotのプラグは私も使っており便利です。
導入方法
導入手順を詳しく説明していきます。手順の概要としては以下になります。
なお、PCにPythonがインストールされている前提で書いていますので、インストールがまだの方はまずPythonをインストールしてください。
- スマートプラグの設定
- Home AssistantにMosquitto brokerをインストール
- PythonのMQTTモジュールをインストール
- PCバッテリー残量情報をHome Assistantに送る(MQTT)
- PCバッテリー残量情報をHome Assistant上で扱う(MQTT Sensor)
- Home Assistantでオートメーションを作成
スマートプラグの設定
まずはスマートプラグをHome Assistantでコントロールできるようにします。スマートプラグによってやり方が異なります。
この記事では私が使っているSwitchBotのスマートプラグについて説明していきますSwitchBotの場合 API が公開されていますのでその API によってスマートプラグをコントロールするコードを書いていきます。
これについては以下の記事で詳しく紹介していますので、参考にしてみてください。

コードの保存場所は「configuration.yaml」があるフォルダに「python_scripts」というフォルダを作るのが良いでしょう。
Home Assistant上のスイッチとして利用するためconfiguration.yamlを変更します。具体的には、次のコードをconfiguration.yamlに追加してください。
shell_command:
sb_plug_on: 'python3 ./python_scripts/sb_plug_control.py turnOn'
sb_plug_off: 'python3 ./python_scripts/sb_plug_control.py turnOff'
switch:
- platform: template
switches:
plug:
friendly_name: "スマートプラグ"
turn_on:
- service: shell_command.sb_plug_on
turn_off:
- service: shell_command.sb_plug_off
shell_commandのところはPythonスクリプトを呼び出すためのコードです。switchの部分がスマートプラグのオン/オフを切り替えるスイッチの記述です。オンにするとサービスが呼び出されます。サービスは「shell_command.sb_plug_on」というサービスでshell_command内のsb_plug_onに書かれているサービスを呼び出します。つまり、「sb_plug_control.py turnOn」のコマンドを実行することになり、スマートプラグがオンになります。
configuration.yamlを修正したらHome Assistantを再起動します。再起動が完了するとオーバービューの画面に設定したスマートプラグのスイッチが表示されます。これをオンオフすることでコントロールできるはずです。
なお、コードの修正にはHome AssistantのアドオンであるFile editorを使うのがおすすめです。アドオンストアから簡単にインストールができます。
スマートプラグの登録は以上です。
Home AssistantにMosquitto brokerをインストール
Home AssistantでMQTTが使えるように設定します。具体的にはアドオンのMosquitto brokerをインストールします。
詳しくはこちらで記事の「Mosquitto brokerの導入と設定」の項目で解説していますのでこちらを参照ください。

PythonのMQTTモジュールをインストール
バッテリー残量を管理したいPCでMQTTを使用できるようにするため、PythonのMQTTモジュールをインストールします。
以下のコマンドを実行してください。
pip install paho-mqtt
PCバッテリー残量をHome Assistantに送る(MQTT)
PCのバッテリー残量に応じてスマートプラグのオン/オフを切り替えるためには、PCのバッテリー残量をHome Assistant上で扱う必要があります。そのためにはPCからバッテリー残量をHome Assistantに情報を送信してあげる必要があります。その方法は具体的にはMQTTという通信プロトコルを使って行います。
バッテリー管理したいPCから定期的にバッテリー残量をMQTTでHome Assistantに送るには、次のコードをPythonで作成します。
import psutil
import paho.mqtt.client as mqtt
import time
broker_address = "(あなたのHome AssistantのIPアドレス)"
broker_port = 1883
topic = "windows/pc/battery"
MQTT_USER="mqtt_user" #異なる場合は書き換えてください
MQTT_PASS="(ご自身で設定したパスワード)"
def publish_battery_level():
battery = psutil.sensors_battery()
percent = battery.percent
try:
mqttc = mqtt.Client(topic)
mqttc.username_pw_set(MQTT_USER, MQTT_PASS)
mqttc.connect(broker_address, broker_port)
mqttc.publish(topic, percent, 1)
except Exception as e:
print(e)
time.sleep(10)
# 定期的にバッテリーレベルを送信
while True:
publish_battery_level()
time.sleep(1*60) #1分おき
このコードを実行することでPCのバッテリー残量をHome Assistantで送ることができます。これでもやりたいことは十分ではありますが、常にコンソール画面(黒いコマンドプロンプト画面)が表示されるので正直邪魔です。そのため、コンソール画面を非表示にして実行できるようにしていきます。
ただし、単純にコンソール画面を非表示にするだけだと、万が一このコードを終了させたい時にタスクマネージャーからどのタスクなのかわかりづらいため、終了しにくいです。そこでパッケージ化し、タスク名をつけることで終了させたい時もタスクマネージャーからタスク名で判断して終了させることができます。
パッケージ化するためにはまずPyinstallerをインストールする必要があります。インストールはコマンドプロンプトで以下のように打ち込みます。
pip install pyinstaller
パッケージ化するためにはPythonスクリプトを保存したフォルダでコマンドプロンプトを起動して、以下のコマンドを打ち込みます。
pyinstaller -F -w send_battery_status.py
しばらくするとEXEファイルが作成されます。このEXEファイルをダブルクリックで実行してください。
EXEファイルをスタートアップに登録することでPCが起動した時にこのコードが実行され、常にバッテリー残量をHome Assistantに送信にできるようになります。スタートアップに登録するには「ファイル名を指定して実行」で「shell:startup」と打つとスタートアップフォルダが表示されます。このフォルダに「send_battery_status.py」を移動してください。
PCバッテリー残量をHome Assistantで扱う(MQTT Sensor)
送信されたバッテリー残量情報をHome Assistant上で扱うためにはconfiguration.yamlを修正し、MQTT Sensorを追加します。センサー値としてバッテリー残量を扱います。configuration.yamlに以下のコードを貼り付けてください。
mqtt:
sensor:
- name: "Windows PC Battery Level"
state_topic: "windows/pc/battery"
unit_of_measurement: "%"
追加したら保存してHome Assistantを再起動します。
オーバービュー画面にバッテリー残量というセンサーが追加され、パーセンテージが表示されていれば成功です。

オートメーションの設定
最後にオートメーションを設定します。
Home Assistantの設定からオートメーションとシーンに移動し、右下のオートメーションの作成をクリックします。「新しいオートメーションを作成」を選択し、空のオートメーション設定画面に移動します。
概要としては、トリガーとしてPCバッテリー残量が40%以下になった時にスマートプラグの電源をオンにするオートメーションを作成します。
具体的な設定方法としては以下の手順に従っていきます。
トリガーとしては「数値の状態」を選択し、エンティティにバッテリー残量のセンサー名である「Windows PC Battery Level」を選択します。下(Below)モードを定数を選択して40と打ち込みます。これでバッテリー残量が40%未満になったらというトリガーになります。

次にアクションとしてスマートプラグをオンにするという設定を行います。アクションを追加から「デバイス」を選択し、デバイス名に「スマートプラグ」を選択します。そして、アクションに「オンにする」を設定します。私の環境では「スマートプラグ」を「PCプラグ」という名前に設定しているので下記画像は「PCプラグ」となっていますが読み替えてください。

ここまで来たらオートメーションを保存します。
同様にバッテリー残量が80%以上になった場合に充電を止めるというオートメーションを作成します。やり方は同じでトリガーとして「数値の状態」を選択し、同じエンティティ名を選択し、今度は上(Above)モードに80と打ち込みます。アクションにはスマートプラグをオフにすると設定します。
以上で設定は完了です。
まとめ
いかがだったでしょうか?
今回はノートPCのバッテリー過充電を防止するためにスマートプラグを活用して、バッテリー残量が40%未満になったら充電を行い、80%以上になったら充電を止めるという仕組みを作ってみました。
これでバッテリー劣化を抑えることができますね!
わかりやすく書くことを心掛けてはいますが、冗長になってしまう部分もあり少し省略気味に書いている部分もあります。もしご不明点があればお気軽にお問い合わせください。個別に回答していきます。

今回活用したスマートプラグはこちらです。
また、コードはPythonを使っています。もしPythonに不安を感じている人は以下の本で勉強すると良いですよ!初心者向きでわかりやすく学ぶことができます。
↓超入門書
↓初級本
スマートホームに関する記事を他にも書いています。ぜひこちらも参考にしてみてください。

コメント