Windows 11 でのラップトップの条件付き電源管理の方法

Windows 11 でのラップトップの条件付き電源管理の方法

バッテリーの充電レベルに基づいて条件付きの電源管理ルールを設定したいと思います。

現在、電源オンとバッテリオンに適切なルールを設定しています。これに加えて、バッテリの充電レベルが 75% を超える場合に電源オン設定を適用したいと思います。この目的は、バッテリが十分に充電されているときに積極的なスリープ設定が適用されないようにすることです。これを実行する方法はまだ思いついていませんが、充電レベルに基づいてバッテリオン電源設定を変更できる Python スクリプトがあるのではないかと考えています。これには、Python をインストールし、スクリプトをサービスとして実行する必要があります。よくわかりませんが、スクリプトには管理者権限が必要だと思います。

このアイデアを調査し始める前に、要件が複雑ではないと思われるため、これを行うためのより優れた、より簡単な方法があるかどうか疑問に思いました。

Windows システムで、バッテリーの充電率に基づいて電源設定を行う方法はありますか?

答え1

私は最終的にこれを管理するために Python スクリプトを作成しました。必要なのは Python のみで、管理者権限は必要なく、追加のモジュールも必要ありません。

import subprocess
import time
import datetime

battery_watermark = 75
sleep_on_battery_mins = 20

def set_standby_timeout_dc(mins):
    return subprocess.call("powercfg -change -standby-timeout-dc " +str(mins))

def battery_precentage():
    return int(subprocess.run(["WMIC", "PATH", "Win32_Battery", "Get", "EstimatedChargeRemaining"], capture_output=True).stdout.decode().split("\n")[1][:3].strip())

def on_battery():
    #BatteryStatus returns 2 when connected to AC.
    charging_status = int(subprocess.run(["WMIC", "PATH", "Win32_Battery", "Get", "BatteryStatus"], capture_output=True).stdout.decode().split("\n")[1].strip())
    if charging_status == 2:
        return False
    else:
        return True

print("Windows Power settings changer")
starttime = time.time()
while True:
    if (battery_precentage() > battery_watermark) and on_battery():
            print(str(datetime.datetime.now()) + ": Setting on-battery standby timeout to 0, battery at " + str(battery_precentage()) + "%, on battery: " + str(on_battery()))
            set_standby_timeout_dc(0)
    else:
        print(str(datetime.datetime.now()) + ": Setting on-battery standby timeout to " + str(sleep_on_battery_mins) + ", battery at " + str(battery_precentage()) + "%, on battery: " + str(on_battery()))
        set_standby_timeout_dc(sleep_on_battery_mins)
    time.sleep(((sleep_on_battery_mins/2)-1)*60 - ((time.time() - starttime) %60))

関連情報