1. 何ができる?
マイニングリグ内のGPUが不安定になった・動作を停止した際に、自律的にPCを再起動したいときに使えます。
リグ内のGPUが止まったタイミングで気づければよいのですが、深夜だったり、外出時に止まるとすぐには対応できず、再起動を実施するのも手間がかかるので、スクリプトを組んで勝手に再起動してもらいます。
NiceHashの採掘状況の情報を使って、動いている/止まっているを判断しているため、NiceHashを使っているリグが対象です。
2. 用意するもの
(1) NiceHashのAPIキー・Organization ID
① NiceHashにログイン後、右上のメニューより「MY SETTINGS」をクリック

② API Keys画面を開くとOrganization IDが表示されるのでメモ
  「CREATE NEW API KEY」をクリック

③ App Nameは好きな値を設定し、API Permissionsは「Mining Permissions」だけあればOKです
  IP Addressesやexpiresはお好みで設定


④ Password を求められるので入力

⑤ APIキーが生成されるので、2つともメモしておきます

⑥ Yes~をチェックし、「ACTIVATE API KEY NOW」をクリックするとメールで確認コードが届くので入力すればAPIキーが有効になります。

(2) 監視したいリグのRigID
① ログイン後のページから「GO TO RIG MANAGER」をクリック

② 監視したいRigをクリック

③ Device detailsに表示されるIDをメモします

(3) NiceHashのPythonライブラリ
githubからNiceHashのpythonライブラリをダウンロードして、(4)のスクリプトと同ディレクトリに置きます。
(4) スクリプト
import time
import nicehash
import os
MAX_ERROR_COUNT = 6
def checkHashrateIsZero():
	host = 'https://api2.nicehash.com'
	organisation_id = 'your organisation_id'
	key = 'your api key'
	secret = 'your api secret'
	rigId = "your rigId"
	
	private_api = nicehash.private_api(host, organisation_id, key, secret, True)
	try:
		ret = private_api.request("GET", "/main/api/v2/mining/rig2/" + rigId, "", None)
		sppedList = []
		for device in ret['devices']:
			try:
				sppedList.append(device['speeds'][0]['speed'])
			except:
				pass
		print(sppedList)
		return ("0" in sppedList)
	except:
		return True
errorCount = 0
while True:
	if checkHashrateIsZero():
		errorCount += 1
		if errorCount >= MAX_ERROR_COUNT:
			os.system('shutdown -r -f')
	else:
		errorCount = 0
	time.sleep(5*60)
スクリプト内の以下4つに(1)(2)でメモした値を入れます。
 organisation_id = ‘your organisation_id’
 key = ‘your api key’
 secret = ‘your api secret’
 rigId = “your rigId”
処理の流れは以下です。
① NiceHashのAPIをたたき、リグ内の各GPUのデバイス情報を得る
② 各GPUのデバイス情報から、マイニングスピード情報を抽出しリストを作る 
 ※CPUなど、マイニングに使っていない (Disableになっている) デバイスからマイニングスピードの情報を取ろうとするとexceptになるのでそこはケアをする
③ ②のリストの中に “0” があったらエラーとしてカウント
④ MAX_ERROR_COUNTで定義した回数以上エラーが連続したら再起動する
⑤ 何もなければ 5分待機
4. 自動起動設定
(1) マイニングリグ起動後の自動マイニング開始設定
① NiceHash起動時に自動でマイニングが始まるように設定
  NiceHashのソフトウェア画面から「Autostart Mining」をチェック

② NiceHashの自動起動設定
  ①と同画面にて「Rub On Startup」をチェック
③ PC起動時のWindowsの自動ログイン設定
  Win+Rの実行画面より「netplwiz」を開き、ユーザーが~ のチェックを外して「OK」を押下後パスワードを入力
(2) スクリプト自体の自動起動設定
スクリプト自体も自動で起動しないと困るので、以下のようなバッチファイルをスクリプトと同じディレクトリに作り、Windowsのスタートアップに設定します。
cd %~dp0
python autoReboot.pyスタートアップ設定は、Win+R を押し「shell:startup」を実行するとスタートアップフォルダが開くので、作ったバッチファイルを Shift+Ctrlを押下しながらドラッグアンドドロップし、batファイルへのリンクを作成すればOKです。
念のため、PCを再起動後、NiceHashが起動してマイニングが始まるかと、設定したスクリプトが動き始めるか確認しておいた方がよいかと思います。


コメント