[備忘録] PythonでnasneのHDD残り容量を取得する

スポンサーリンク

やりたいこと

いつのまにかNASNEのHDD容量がなくって録画できていないことがあったので、
なんかいい感じにHDD残容量チェックしたい。

スポンサーリンク

どうすればHDD残容量を取得できるか?

nasne API というのがあるらしい。
webブラウザでnasneのIPアドレスを指定するとnasne HOME が表示される。
このページでnasneの操作を行ったり、情報を取得したりしているのがnasne APIらしい。

nasne APIについては以下のサイトを参考にしました。
http://pocketstudio.jp/log3/2014/12/07/nasune_api/

で、HDDの情報を取得するにはURLに、
http://nasneのIPアドレス:64210/status/HDDInfoGet?id=0
と指定すればいいみたい。

idの部分は0が内蔵HDDで1が外付けHDDになる。

実際にたたくと結果がJSON形式で返ってくる。

{ 
	"errorcode": 0, 
	"HDD": { 
		"id": 0, 
		"internalFlag": 0,
		 "mountStatus": 1, 
		 "registerFlag": 1, 
		 "format": "xfs", 
		 "name": "hdd0", 
		 "vendorID": "ATA", 
		 "productID": "HGST HTS541010A9", 
		 "serialNumber": "JDXXXXXXXXXXXX", 
		 "usedVolumeSize": 840641601536, 
		 "freeVolumeSize": 157732335616, 
		 "totalVolumeSize": 998373937152 
	}
}

totalVolumeSizeが合計容量、freeVolumeSizeが空き容量、usedVolumeSizeが使用容量

あとはこれらをいい感じにまとめられればいけるはず。

スポンサーリンク

とりあえずコードを書いてみる

Http通信をしたいのでrequests、JSONを扱いたいのでjsonをインポートする。

import requests
import json

msg = 'nesne info\n'
info = [["0", "内蔵HDD"], ["1", "外付けHDD"]]
for i in info:
    get_url_info = requests.get(f'http://nasneのIPアドレス:64210/status/HDDInfoGet?id={i[0]}')
    js = json.loads(get_url_info.text)

    used_b = int(js['HDD']['usedVolumeSize'])
    free_b = int(js['HDD']['freeVolumeSize'])
    total_b = int(js['HDD']['totalVolumeSize']) 
    
    #                  K      M      G
    used_g = used_b / 1024 / 1024 / 1024
    free_g = free_b / 1024 / 1024 / 1024
    total_g = total_b / 1024 / 1024 / 1024

    used_g = round(used_g, 2)
    free_g = round(free_g, 2)
    total_g = round(total_g, 2)

    used_percent = round(used_b / total_b * 100, 2)
    free_percent = round(free_b / total_b * 100, 2)

    msg += f'{i[1]}------\n'
    msg += f'USED: {used_g}GB({used_percent}%)\n'
    msg += f'FREE: {free_g}GB({free_percent}%)\n'
    msg += f'TOTAL:{total_g}GB\n'
print(msg)

実行結果はこんな感じになった、

nesne info
内蔵HDD------
USED: 782.91GB(84.2%)
FREE: 146.9GB(15.8%)
TOTAL:929.81GB
外付けHDD------
USED: 1847.46GB(99.19%)
FREE: 15.1GB(0.81%)
TOTAL:1862.56GB

とりあえず容量を取得できた、
あとはこれを1日に1回実行できるようにするのと、
使用率n%を切ったら知らせる機能を追加したい。


コメント

タイトルとURLをコピーしました