Advertisement
Guest User

fancontrol.fixed

a guest
Sep 17th, 2011
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 13.69 KB | None | 0 0
  1. import os
  2. import math
  3. import time
  4.  
  5. adapters = 4 # Number of adapters you have connected (Read: GPU's, not cards or fans)
  6. 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)
  7. roundtime = 3 # Seconds to wait between checking temps
  8. 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)
  9. overheatwait = 7 # Overheatwait * roundtime = Seconds to blast 100% on card after reaching maximum temp
  10. lockall = True # This will lock all cards at 100% for a period of time if any should reach maximum temp
  11. followHottest = False # The cooler cards will run on the same speeds as the hottest card, this overrides calcAverage
  12. 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.
  13.  
  14. # Don't touch these...
  15. speeds = range(0,adapters)
  16. temps = range(0,adapters)
  17. ctemps = range(0,adapters)
  18. waitleft = range(0,adapters)
  19. currentTemperature = float(0)
  20. average = 0
  21. alltimehigh = 0
  22. alltimelow = 150
  23. changed = False
  24. maximum = False
  25. lockspeed = 100
  26. nspeed = 100
  27. activeadapters = adapters
  28. avgtemp = 0
  29.  
  30. time.sleep(45)
  31. for adapter in range(0,adapters):
  32.     waitleft[adapter] = 0
  33. for n in inactiveadapters:
  34.     activeadapters -= 1
  35. while True:
  36.     hottest = 0
  37.     average = 0
  38.     if adapters < 1:
  39.         exit
  40.     for adapter in range(0,adapters):
  41.         output = os.popen("DISPLAY=:0." + str(adapter) + " aticonfig --od-gettemperature --adapter=" + str(adapter))
  42.         for i in output.readlines():
  43.             temp = i
  44.         ctemps[adapter] = float(temp[36:41])
  45.         if adapter not in inactiveadapters:
  46.             average += ctemps[adapter]
  47.         if hottest < ctemps[adapter]:
  48.             hottest = ctemps[adapter]
  49.             if alltimehigh < ctemps[adapter]:
  50.                 alltimehigh = ctemps[adapter]
  51.         if alltimelow > ctemps[adapter]:
  52.             alltimelow = ctemps[adapter]
  53.     average = (average / activeadapters)
  54.     raverage = average
  55.     average = average + ((hottest - average)/2)
  56.     avgvari = abs(average - avgtemp)
  57.     if (avgvari >= variation):
  58.         avgtemp = average
  59.     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")
  60.     print("    - Current -            - All time -\nAvg: " + str(raverage)[0:4] + " Hot: " + str(hottest) + "    High: " + str(alltimehigh) + " Low: " + str(alltimelow))
  61.  
  62.     for adapter in range(0,adapters):
  63.         if not calcAverage:
  64.             average = ctemps[adapter]
  65.         currentTemperature = ctemps[adapter]
  66.         print("\nAdapter " + str(adapter) + ": ")
  67.         if waitleft[adapter] > 0:
  68.             print("Temp is: " + str(currentTemperature))
  69.             print("Variation: " + str((currentTemperature - temps[adapter])) + " (Since speed locked to 100%)")
  70.             if speeds[adapter] < lockspeed:
  71.                 temp = os.popen("DISPLAY=:0." + str(adapter) + " aticonfig --pplib-cmd \"set fanspeed 0 " + str(nspeed) + "\"").readline()[27:38]
  72.                 if temp == "Successful!":
  73.                     print("Current speed is set to " + str(speeds[adapter]) + "%, locking to " + str(lockspeed) + "% for " + str((waitleft[adapter] * roundtime)) + " more seconds. (Succesful)\n")
  74.                     speeds[adapter] = lockspeed
  75.                 else:
  76.                     print("Current speed is set to " + str(speeds[adapter]) + "%, locking to " + str(lockspeed) + "% for " + str((waitleft[adapter] * roundtime)) + " more seconds. (Failed)\n")
  77.             else:
  78.                 print("Current speed is set to " + str(speeds[adapter]) + "% for " + str((waitleft[adapter] * roundtime)) + " more seconds.\n")
  79.             waitleft[adapter] = (waitleft[adapter] - 1)
  80.         elif (temps[adapter] != currentTemperature) or (ctemps[adapter] < average):
  81.             vari = abs(currentTemperature - temps[adapter])
  82.             if (vari >= variation) or ((ctemps[adapter] < average) and (avgvari >= variation)) or (ctemps[adapter] < hottest):
  83.                 if followHottest == True:
  84.                     currentTemperature = hottest
  85.                 elif calcAverage == True:
  86.                     if ctemps[adapter] < average:
  87.                         currentTemperature = average
  88.                 elif currentTemperature <= 52:
  89.                     nspeed = 40
  90.                     if speeds[adapter] != nspeed:
  91.                         changed = True
  92.                 if currentTemperature <= 54:
  93.                     nspeed = 55
  94.                     if speeds[adapter] != nspeed:
  95.                         changed = True
  96.                 elif currentTemperature <= 56:
  97.                     nspeed = 56
  98.                     if speeds[adapter] != nspeed:
  99.                         changed = True
  100.                 elif currentTemperature <= 58:
  101.                     nspeed = 57
  102.                     if speeds[adapter] != nspeed:
  103.                         changed = True
  104.                 elif currentTemperature <= 60:
  105.                     nspeed = 58
  106.                     if speeds[adapter] != nspeed:
  107.                         changed = True
  108.                 elif currentTemperature <= 62:
  109.                     nspeed = 59
  110.                     if speeds[adapter] != nspeed:
  111.                         changed = True
  112.                 elif currentTemperature <= 64:
  113.                     nspeed = 60
  114.                     if speeds[adapter] != nspeed:
  115.                         changed = True
  116.                 elif currentTemperature <= 66:
  117.                     nspeed = 61
  118.                     if speeds[adapter] != nspeed:
  119.                         changed = True
  120.                 elif currentTemperature <= 68:
  121.                     nspeed = 62
  122.                     if speeds[adapter] != nspeed:
  123.                         changed = True
  124.                 elif currentTemperature <= 69:
  125.                     nspeed = 63
  126.                     if speeds[adapter] != nspeed:
  127.                         changed = True
  128.                 elif currentTemperature <= 70:
  129.                     nspeed = 64
  130.                     if speeds[adapter] != nspeed:
  131.                         changed = True
  132.                 elif currentTemperature <= 71:
  133.                     nspeed = 65
  134.                     if speeds[adapter] != nspeed:
  135.                         changed = True
  136.                 elif currentTemperature <= 72:
  137.                     nspeed = 66
  138.                     if speeds[adapter] != nspeed:
  139.                         changed = True
  140.                 elif currentTemperature <= 73:
  141.                     nspeed = 67
  142.                     if speeds[adapter] != nspeed:
  143.                         changed = True
  144.                 elif currentTemperature <= 74:
  145.                     nspeed = 68
  146.                     if speeds[adapter] != nspeed:
  147.                         changed = True
  148.                 elif currentTemperature <= 75:
  149.                     nspeed = 69
  150.                     if speeds[adapter] != nspeed:
  151.                         changed = True
  152.                 elif currentTemperature <= 76:
  153.                     nspeed = 70
  154.                     if speeds[adapter] != nspeed:
  155.                         changed = True
  156.                 elif currentTemperature <= 77:
  157.                     nspeed = 71
  158.                     if speeds[adapter] != nspeed:
  159.                         changed = True
  160.                 elif currentTemperature <= 78:
  161.                     nspeed = 73
  162.                     if speeds[adapter] != nspeed:
  163.                         changed = True
  164.                 elif currentTemperature <= 79:
  165.                     nspeed = 76
  166.                     if speeds[adapter] != nspeed:
  167.                         changed = True
  168.                 elif currentTemperature <= 80:
  169.                     nspeed = 79
  170.                     if speeds[adapter] != nspeed:
  171.                         changed = True
  172.                 elif currentTemperature <= 81:
  173.                     nspeed = 82
  174.                     if speeds[adapter] != nspeed:
  175.                         changed = True
  176.                 elif currentTemperature <= 82:
  177.                     nspeed = 85
  178.                     if speeds[adapter] != nspeed:
  179.                         changed = True
  180.                 elif currentTemperature <= 83:
  181.                     nspeed = 88
  182.                     if speeds[adapter] != nspeed:
  183.                         changed = True
  184.                 elif currentTemperature <= 84:
  185.                     nspeed = 91
  186.                     if speeds[adapter] != nspeed:
  187.                         changed = True
  188.                 elif currentTemperature <= 85:
  189.                     nspeed = 94
  190.                     if speeds[adapter] != nspeed:
  191.                         changed = True
  192.                 elif currentTemperature <= 86:
  193.                     nspeed = 97
  194.                     if speeds[adapter] != nspeed:
  195.                         changed = True
  196.                 elif currentTemperature > (86.5):
  197.                     nspeed = 100
  198.                     if speeds[adapter] != nspeed:
  199.                         maximum = True
  200.                         changed = True
  201.                 currentTemperature = ctemps[adapter]
  202.                 if (followHottest == True) and (ctemps[adapter] < hottest):
  203.                     print("Temp is: " + str(currentTemperature) + " (" + str(hottest) + ")")
  204.                 elif (calcAverage == True) and (ctemps[adapter] < average):
  205.                     print("Temp is: " + str(currentTemperature) + " (" + str(average)[0:4] + ")")
  206.                 else:
  207.                     print("Temp is: " + str(currentTemperature))
  208.                 if vari >= variation:
  209.                     print("Variation: " + str((currentTemperature - temps[adapter])) + " (New point)")
  210.                     temps[adapter] = currentTemperature
  211.                 else:
  212.                     print("Variation: " + str((currentTemperature - temps[adapter])))
  213.                 if not changed:
  214.                     print("Current speed is set to: " + str(speeds[adapter]) + "%")
  215.                 else:
  216.                     if not maximum:
  217.                         if adapter in inactiveadapters:
  218.                             print("Setting speed to: " + str(nspeed) + "% (Inactive)")
  219.                             speeds[adapter] = nspeed
  220.                         else:
  221.                             temp = os.popen("DISPLAY=:0." + str(adapter) + " aticonfig --pplib-cmd \"set fanspeed 0 " + str(nspeed) + "\"").readline()[27:38]
  222.                             if temp == "Successful!":
  223.                                 print("Setting speed to: " + str(nspeed) + "% (Succesful)")
  224.                                 speeds[adapter] = nspeed
  225.                             else:
  226.                                 print("Setting speed to: " + str(nspeed) + "% (Failed)")        
  227.                     else:
  228.                         if adapter in inactiveadapters:
  229.                             print("Setting speed to: " + str(nspeed) + "% (Inactive)")
  230.                             speeds[adapter] = nspeed
  231.                         else:
  232.                             temp = os.popen("DISPLAY=:0." + str(adapter) + " aticonfig --pplib-cmd \"set fanspeed 0 " + str(nspeed) + "\"").readline()[27:38]
  233.                             if temp == "Successful!":
  234.                                 print("Maximum allowed temperature reached! Setting speed to " + str(nspeed) + "% for " + str((int(overheatwait) * int(roundtime))) + " seconds! (Succesful)")
  235.                                 speeds[adapter] = nspeed
  236.                             else:
  237.                                 print("Maximum allowed temperature reached! Setting speed to " + str(nspeed) + "% for " + str((int(overheatwait) * int(roundtime))) + " seconds! (Fail)")
  238.                             if lockall == True:
  239.                                 for nadapter in range(0,adapters):
  240.                                     waitleft[nadapter] = overheatwait
  241.                             else:
  242.                                 waitleft[adapter] = overheatwait
  243.                         maximum = False
  244.                     changed = False
  245.             else:
  246.                 if (followHottest == True) and (ctemps[adapter] < hottest):
  247.                     currentTemperature = ctemps[adapter]
  248.                     print("Temp is: " + str(currentTemperature) + " (" + str(hottest) + ")")
  249.                 elif (calcAverage == True) and (ctemps[adapter] < average):
  250.                     currentTemperature = ctemps[adapter]
  251.                     print("Temp is: " + str(currentTemperature) + " (" + str(average) + ")")
  252.                 else:
  253.                     print("Temp is: " + str(currentTemperature))
  254.                 print("Variation: " + str((currentTemperature - temps[adapter])))
  255.                 print("Current speed is set to: " + str(speeds[adapter]) + "%")
  256.         else:
  257.             if (followHottest == True) and (ctemps[adapter] < hottest):
  258.                 currentTemperature = ctemps[adapter]
  259.                 print("Temp is: " + str(currentTemperature) + " (" + str(hottest) + ")")
  260.             elif (calcAverage == True) and (ctemps[adapter] < average):
  261.                 currentTemperature = ctemps[adapter]
  262.                 print("Temp is: " + str(currentTemperature) + " (" + str(average) + ")")
  263.             else:
  264.                 print("Temp is: " + str(currentTemperature))
  265.             print("Variation: " + str((currentTemperature - temps[adapter])))
  266.             print("Current speed is set to: " + str(speeds[adapter]) + "%")
  267.     time.sleep(roundtime)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement