mirror of
https://github.com/Death916/minestart.git
synced 2026-04-10 03:33:43 -07:00
188 lines
5.1 KiB
Python
188 lines
5.1 KiB
Python
"""" restart miner when gpu is low usage and kill miner if already running
|
|
"""
|
|
|
|
import time
|
|
from subprocess import CREATE_NEW_CONSOLE
|
|
import GPUtil as gpu
|
|
#import keyboard
|
|
import psutil
|
|
import sys
|
|
import os
|
|
|
|
|
|
gameList = {"gears": "gears5.exe",
|
|
"outer_worlds": "IndianaWindowsStore-Win64-Shipping.exe",
|
|
"total_war": "Three_Kingdoms.exe",
|
|
"poe": "PathOfExile_x64Steam",
|
|
"valorant": "VALORANT-Win64-Shipping.exe",
|
|
"Fallout 76": "fallout76.exe",
|
|
"Total War: Troy": "troy.exe"
|
|
|
|
}
|
|
|
|
try:
|
|
firstminer = str(sys.argv[1])
|
|
except:
|
|
|
|
|
|
firstminer = input('choose between "ccminer" or "nanominer" or "trex" exactly: ')
|
|
if firstminer == "ccminer":
|
|
pass
|
|
elif firstminer == "nanominer":
|
|
global curminer
|
|
os.chdir('C:\\Users\\death\\Documents\\code\\Scripts\\nanominer-windows-1.10.0')
|
|
curminer = "nanominer.exe"
|
|
elif firstminer == "trex":
|
|
os.chdir('C:\\Users\\death\\Documents\\code\\other\\t-rex-0.26.4-win')
|
|
curminer = "t-rex.exe"
|
|
pass
|
|
#TODO: add error handling for invalid input
|
|
#TODO: clean up code above with some type of dict lookup or soemthing
|
|
|
|
miners = ['ccminer.exe', 'nanominer.exe']
|
|
|
|
|
|
|
|
def checkgpu():
|
|
'''check gpu availability and utilization'''
|
|
card = gpu.getGPUs()
|
|
isavailable = gpu.getAvailability(card, maxLoad=.6)
|
|
print(time.ctime())
|
|
if isavailable == [1]:
|
|
print("can mine")
|
|
time.sleep(5)
|
|
return 'isavailable'
|
|
|
|
if isavailable == [0]:
|
|
print("gpu in use")
|
|
gpu.showUtilization()
|
|
time.sleep(5)
|
|
|
|
return 'notavailable'
|
|
|
|
|
|
|
|
def findProcessIdByName(processName):
|
|
"""helper function to find miner exe"""
|
|
listOfProcessObjects = []
|
|
|
|
# Iterate over the all the running process
|
|
for proc in psutil.process_iter():
|
|
try:
|
|
pinfo = proc.as_dict(attrs=['pid', 'name', 'create_time'])
|
|
# Check if process name contains the given name string.
|
|
if processName.lower() in pinfo['name'].lower():
|
|
listOfProcessObjects.append(pinfo)
|
|
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
|
pass
|
|
return listOfProcessObjects
|
|
|
|
|
|
def checkminer():
|
|
"""check if miner is already running"""
|
|
for miner in miners:
|
|
minercheck = findProcessIdByName(miner)
|
|
|
|
if minercheck == []:
|
|
print('miner not running')
|
|
return 'notrunning'
|
|
else:
|
|
print('miner running')
|
|
print(miner)
|
|
return "running"
|
|
|
|
|
|
|
|
|
|
def killminer(miner):
|
|
minerkill = findProcessIdByName(miner)
|
|
pid = minerkill[0]['pid']
|
|
psutil.Process(pid).kill()
|
|
print('killed miner')
|
|
|
|
|
|
def startminer():
|
|
keyboard.press_and_release('alt+x')
|
|
psutil.Popen([curminer], creationflags=CREATE_NEW_CONSOLE)
|
|
|
|
|
|
# noinspection PySimplifyBooleanCheck
|
|
def checkgames():
|
|
"""check if games in game list are running and kill miner if found"""
|
|
for i in gameList.values():
|
|
game = findProcessIdByName(i)
|
|
if game == []:
|
|
print(i + ' is not running')
|
|
|
|
else:
|
|
print("game is running")
|
|
|
|
miners = checkminer()
|
|
if miners == 'running':
|
|
killminer(curminer)
|
|
|
|
|
|
return 'gamerunning'
|
|
|
|
def check_evga():
|
|
evga = findProcessIdByName('PrecisionX_x64.exe')
|
|
if evga == []:
|
|
print('evga not running')
|
|
psutil.Popen(['E:/Precision X1/PrecisionX_x64.exe'], shell=True)
|
|
evga = findProcessIdByName('PrecisionX_x64.exe')
|
|
if evga:
|
|
print('evga started')
|
|
|
|
def peak_hours():
|
|
"""check if peak hours are active"""
|
|
if time.localtime().tm_hour in range(17, 20):
|
|
print('peak hours')
|
|
killminer(curminer)
|
|
return 'peak'
|
|
else:
|
|
print('off peak')
|
|
return 'offpeak'
|
|
|
|
"""def log(x):
|
|
with open('C:/Users/Death/Documents/logs/gpulog.csv', 'a') as f:
|
|
f.write(str(time.ctime()) + '\n' + x + '\n')
|
|
f.close()
|
|
"""
|
|
|
|
curTime = time.time()
|
|
while True:
|
|
checkgames()
|
|
gpus = checkgpu()
|
|
miner = checkminer()
|
|
check_evga()
|
|
|
|
usage = str(gpu.showUtilization())
|
|
#log(str(gpu.showUtilization()))
|
|
|
|
if gpus == 'isavailable' and miner == 'notrunning':
|
|
x = checkgames()
|
|
if x != 'gamerunning':
|
|
print('starting miner')
|
|
#keyboard.press_and_release('alt+x')
|
|
startminer()
|
|
time.sleep(12)
|
|
|
|
if gpus == 'isavailable' and miner == 'running':
|
|
killminer(miner)
|
|
#keyboard.press_and_release('alt+y')
|
|
time.sleep(30)
|
|
|
|
if time.time() - curTime > 21600:
|
|
if miner: #dont run if miner not running
|
|
killminer(miner)
|
|
print('restarting')
|
|
curTime = time.time()
|
|
time.sleep(10)
|
|
|
|
|
|
#TODO:check temp
|
|
#TODO: if no network kill and wait
|
|
#TODO: test check_evga(), get to work with uac on
|
|
#TODO: make sure evga goes to 100 when game starts
|
|
#TODO: log
|
|
#TODO: maybe make gui ???? maybe just exe
|