Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import math
- import time
- adapters = 4 # Number of adapters you have connected (Read: GPU's, not cards or fans)
- inactiveadapters = [1,3] # Use if you got multiple GPU's on your card(s), inactivate the one who has the lowest temp (usually the second gpu, starting at 0)
- roundtime = 3 # Seconds to wait between checking temps
- variation = 1.5 # Variation needed before actually check if new level is reached in 0.5 increments (Increased variation gives more stable speeds while deacreased will give you faster reactions)
- overheatwait = 7 # Overheatwait * roundtime = Seconds to blast 100% on card after reaching maximum temp
- lockall = True # This will lock all cards at 100% for a period of time if any should reach maximum temp
- followHottest = False # The cooler cards will run on the same speeds as the hottest card, this overrides calcAverage
- calcAverage = True # If one card is running hotter the other cards will increase their speed to counter heat from spreading by the calculating the average temperature and adding half of the difference between the warmest adapter and the average temperature and then use that value as base for the lowest speed to be set.
- # Don't touch these...
- speeds = range(0,adapters)
- temps = range(0,adapters)
- ctemps = range(0,adapters)
- waitleft = range(0,adapters)
- currentTemperature = float(0)
- average = 0
- alltimehigh = 0
- alltimelow = 150
- changed = False
- maximum = False
- lockspeed = 100
- nspeed = 100
- activeadapters = adapters
- avgtemp = 0
- time.sleep(45)
- for adapter in range(0,adapters):
- waitleft[adapter] = 0
- for n in inactiveadapters:
- activeadapters -= 1
- while True:
- hottest = 0
- average = 0
- if adapters < 1:
- exit
- for adapter in range(0,adapters):
- output = os.popen("DISPLAY=:0." + str(adapter) + " aticonfig --od-gettemperature --adapter=" + str(adapter))
- for i in output.readlines():
- temp = i
- ctemps[adapter] = float(temp[36:41])
- if adapter not in inactiveadapters:
- average += ctemps[adapter]
- if hottest < ctemps[adapter]:
- hottest = ctemps[adapter]
- if alltimehigh < ctemps[adapter]:
- alltimehigh = ctemps[adapter]
- if alltimelow > ctemps[adapter]:
- alltimelow = ctemps[adapter]
- average = (average / activeadapters)
- raverage = average
- average = average + ((hottest - average)/2)
- avgvari = abs(average - avgtemp)
- if (avgvari >= variation):
- avgtemp = average
- print("\n\n\n\n============== BREAK LINE =================\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n")
- print(" - Current - - All time -\nAvg: " + str(raverage)[0:4] + " Hot: " + str(hottest) + " High: " + str(alltimehigh) + " Low: " + str(alltimelow))
- for adapter in range(0,adapters):
- if not calcAverage:
- average = ctemps[adapter]
- currentTemperature = ctemps[adapter]
- print("\nAdapter " + str(adapter) + ": ")
- if waitleft[adapter] > 0:
- print("Temp is: " + str(currentTemperature))
- print("Variation: " + str((currentTemperature - temps[adapter])) + " (Since speed locked to 100%)")
- if speeds[adapter] < lockspeed:
- temp = os.popen("DISPLAY=:0." + str(adapter) + " aticonfig --pplib-cmd \"set fanspeed 0 " + str(nspeed) + "\"").readline()[27:38]
- if temp == "Successful!":
- print("Current speed is set to " + str(speeds[adapter]) + "%, locking to " + str(lockspeed) + "% for " + str((waitleft[adapter] * roundtime)) + " more seconds. (Succesful)\n")
- speeds[adapter] = lockspeed
- else:
- print("Current speed is set to " + str(speeds[adapter]) + "%, locking to " + str(lockspeed) + "% for " + str((waitleft[adapter] * roundtime)) + " more seconds. (Failed)\n")
- else:
- print("Current speed is set to " + str(speeds[adapter]) + "% for " + str((waitleft[adapter] * roundtime)) + " more seconds.\n")
- waitleft[adapter] = (waitleft[adapter] - 1)
- elif (temps[adapter] != currentTemperature) or (ctemps[adapter] < average):
- vari = abs(currentTemperature - temps[adapter])
- if (vari >= variation) or ((ctemps[adapter] < average) and (avgvari >= variation)) or (ctemps[adapter] < hottest):
- if followHottest == True:
- currentTemperature = hottest
- elif calcAverage == True:
- if ctemps[adapter] < average:
- currentTemperature = average
- elif currentTemperature <= 52:
- nspeed = 40
- if speeds[adapter] != nspeed:
- changed = True
- if currentTemperature <= 54:
- nspeed = 55
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 56:
- nspeed = 56
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 58:
- nspeed = 57
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 60:
- nspeed = 58
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 62:
- nspeed = 59
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 64:
- nspeed = 60
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 66:
- nspeed = 61
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 68:
- nspeed = 62
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 69:
- nspeed = 63
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 70:
- nspeed = 64
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 71:
- nspeed = 65
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 72:
- nspeed = 66
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 73:
- nspeed = 67
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 74:
- nspeed = 68
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 75:
- nspeed = 69
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 76:
- nspeed = 70
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 77:
- nspeed = 71
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 78:
- nspeed = 73
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 79:
- nspeed = 76
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 80:
- nspeed = 79
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 81:
- nspeed = 82
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 82:
- nspeed = 85
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 83:
- nspeed = 88
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 84:
- nspeed = 91
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 85:
- nspeed = 94
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature <= 86:
- nspeed = 97
- if speeds[adapter] != nspeed:
- changed = True
- elif currentTemperature > (86.5):
- nspeed = 100
- if speeds[adapter] != nspeed:
- maximum = True
- changed = True
- currentTemperature = ctemps[adapter]
- if (followHottest == True) and (ctemps[adapter] < hottest):
- print("Temp is: " + str(currentTemperature) + " (" + str(hottest) + ")")
- elif (calcAverage == True) and (ctemps[adapter] < average):
- print("Temp is: " + str(currentTemperature) + " (" + str(average)[0:4] + ")")
- else:
- print("Temp is: " + str(currentTemperature))
- if vari >= variation:
- print("Variation: " + str((currentTemperature - temps[adapter])) + " (New point)")
- temps[adapter] = currentTemperature
- else:
- print("Variation: " + str((currentTemperature - temps[adapter])))
- if not changed:
- print("Current speed is set to: " + str(speeds[adapter]) + "%")
- else:
- if not maximum:
- if adapter in inactiveadapters:
- print("Setting speed to: " + str(nspeed) + "% (Inactive)")
- speeds[adapter] = nspeed
- else:
- temp = os.popen("DISPLAY=:0." + str(adapter) + " aticonfig --pplib-cmd \"set fanspeed 0 " + str(nspeed) + "\"").readline()[27:38]
- if temp == "Successful!":
- print("Setting speed to: " + str(nspeed) + "% (Succesful)")
- speeds[adapter] = nspeed
- else:
- print("Setting speed to: " + str(nspeed) + "% (Failed)")
- else:
- if adapter in inactiveadapters:
- print("Setting speed to: " + str(nspeed) + "% (Inactive)")
- speeds[adapter] = nspeed
- else:
- temp = os.popen("DISPLAY=:0." + str(adapter) + " aticonfig --pplib-cmd \"set fanspeed 0 " + str(nspeed) + "\"").readline()[27:38]
- if temp == "Successful!":
- print("Maximum allowed temperature reached! Setting speed to " + str(nspeed) + "% for " + str((int(overheatwait) * int(roundtime))) + " seconds! (Succesful)")
- speeds[adapter] = nspeed
- else:
- print("Maximum allowed temperature reached! Setting speed to " + str(nspeed) + "% for " + str((int(overheatwait) * int(roundtime))) + " seconds! (Fail)")
- if lockall == True:
- for nadapter in range(0,adapters):
- waitleft[nadapter] = overheatwait
- else:
- waitleft[adapter] = overheatwait
- maximum = False
- changed = False
- else:
- if (followHottest == True) and (ctemps[adapter] < hottest):
- currentTemperature = ctemps[adapter]
- print("Temp is: " + str(currentTemperature) + " (" + str(hottest) + ")")
- elif (calcAverage == True) and (ctemps[adapter] < average):
- currentTemperature = ctemps[adapter]
- print("Temp is: " + str(currentTemperature) + " (" + str(average) + ")")
- else:
- print("Temp is: " + str(currentTemperature))
- print("Variation: " + str((currentTemperature - temps[adapter])))
- print("Current speed is set to: " + str(speeds[adapter]) + "%")
- else:
- if (followHottest == True) and (ctemps[adapter] < hottest):
- currentTemperature = ctemps[adapter]
- print("Temp is: " + str(currentTemperature) + " (" + str(hottest) + ")")
- elif (calcAverage == True) and (ctemps[adapter] < average):
- currentTemperature = ctemps[adapter]
- print("Temp is: " + str(currentTemperature) + " (" + str(average) + ")")
- else:
- print("Temp is: " + str(currentTemperature))
- print("Variation: " + str((currentTemperature - temps[adapter])))
- print("Current speed is set to: " + str(speeds[adapter]) + "%")
- time.sleep(roundtime)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement