盆暗の学習記録

データサイエンス ,エンジニアリング,ビジネスについて日々学んだことの備忘録としていく予定です。初心者であり独学なので内容には誤りが含まれる可能性が大いにあります。

[Python]パソコンのバッテリがおかしいのでログを取る

動機

昨年の11月にVAIO S13を買ったのですが,購入当初から「バッテリが少なくなっています」という警告が出ずにいきなりバッテリ切れでスリープに入ることがありました。

指紋リーダーもフリーズすることがよくあったので,「ソフトウェア(Windows?)のインストールに失敗してるのかな」と考えてとりあえず放置していました

Windowsのアップデートをいくつか経て,今はバッテリ残量低下の警告がでるようになってきたのですが,電池残量が30~20%のところから一気に0%に減ってPCがダウンすることがたまにあります。

ただ,毎回そうなるわけではなく,いまいち再現性がない不具合なのでログをとってみたいと思うようになりました。

pythonによるバッテリ残量の取得

バッテリに関するセンサーが取得した情報はpsutilパッケージで得られるようです。

psutil documentation — psutil 5.5.0 documentation

で,日時とバッテリ残量(%),充電器接続の有無といった情報を一定時間ごとに取得してcsvに保存するコードを書いてみました(私はエンジニアリング技術が皆無なのでたぶんスマートなコードじゃないと思いますが…)

import psutil
import datetime
import pandas as pd
import os
import time

i = 0
while True:    
    # バッテリ情報
    btr = psutil.sensors_battery()
    # 現在時刻情報
    dt_now = datetime.datetime.now() # date and time
    # make DF
    log_i = pd.DataFrame(data = {"date": [dt_now.strftime('%Y-%m-%d')], "time": [dt_now.strftime('%H:%M:%S')], 
                                "battery_left_percent": [btr.percent], "battery_power_plugged": [btr.power_plugged]})
    
    # print
    print(log_i)

    # DF binding
    if i == 0:
        log = log_i
    else:
        log = pd.concat([log, log_i])
    
    # save
    file_name = "log_"+dt_now.strftime('%Y-%m-%d')+".csv"
    log.to_csv(file_name, index = None)

    # sleep
    time.sleep(60)
    i = i + 1

データの様子

取得したcsvデータを使って差分をとってバッテリ残量の変化量を算出し,plotするとこんな感じ。

f:id:nigimitama:20190206185445p:plain

-15前後の2つの点は,1分間にバッテリが約15%減少したことを示します。

やっぱおかしいですね。サポートに連絡します…