Add temperature control feature, as the board doesn't do it automatically for any fan but the cpu fan
This commit is contained in:
parent
1da239ae3d
commit
9518085938
@ -14,3 +14,4 @@ This is a script to control 4-pin PWM fans on ASRock Rack motherboards with IPMI
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
-i, --info Read fan information
|
||||
-a, --auto Service to control fans based on temperature
|
||||
|
Binary file not shown.
44
pwm.py
44
pwm.py
@ -3,6 +3,10 @@ import run_cmd
|
||||
import argparse
|
||||
import time
|
||||
MAXFAN = 6
|
||||
MINSPEED = 35
|
||||
MAXSPEED = 100
|
||||
MINTEMP = 30
|
||||
MAXTEMP = 65
|
||||
|
||||
parser = argparse.ArgumentParser(description='Read information about and control fans on ASRock boards with IPMI.', prog='asrock-pwm-ipmi')
|
||||
parser.add_argument('fanplusspeed', nargs='*', metavar='FAN:SPEED',
|
||||
@ -11,18 +15,17 @@ parser.add_argument('fanplusspeed', nargs='*', metavar='FAN:SPEED',
|
||||
# help='Speed to set FAN to')
|
||||
parser.add_argument('-i', '--info', action="store_true", default=False,
|
||||
help='Read fan information')
|
||||
|
||||
parser.add_argument('-a', '--auto', action="store_true", default=False,
|
||||
help='Service to control fans based on temperature')
|
||||
|
||||
args = parser.parse_args()
|
||||
#print(args.info)
|
||||
#print(args)
|
||||
#print(args.fanplusspeed)
|
||||
fanChanged = False
|
||||
if args.info is False and args.fanplusspeed == []:
|
||||
print("Nothing to do! See --help for usage.")
|
||||
quit
|
||||
if args.fanplusspeed != []:
|
||||
for fanopt in args.fanplusspeed:
|
||||
|
||||
def iterateFans(info):
|
||||
for fanopt in info:
|
||||
if str(fanopt.split(":"))[2:-2] == fanopt or int(fanopt.split(":")[0]) < 1 or int(fanopt.split(":")[0]) > MAXFAN:
|
||||
print("Improper format!")
|
||||
continue
|
||||
@ -33,6 +36,35 @@ if args.fanplusspeed != []:
|
||||
print("Set speed of FAN" + fan + " to Auto.")
|
||||
else:
|
||||
print("Set speed of FAN" + fan + " to " + speed + "%.")
|
||||
|
||||
|
||||
while args.auto is True:
|
||||
temp = run_cmd.getTemp()
|
||||
speeds = []
|
||||
if temp < MINTEMP:
|
||||
for i in range(2, 7):
|
||||
speeds.append(str(i) + ":1")
|
||||
#speeds = "2:1 3:1 4:1 5:1 6:1"
|
||||
elif temp > MAXTEMP:
|
||||
for i in range(2, 7):
|
||||
speeds.append(str(i) + ":100")
|
||||
#speeds = "2:100 3:100 4:100 5:100 6:100"
|
||||
else:
|
||||
base = temp - MINTEMP
|
||||
max = MAXTEMP - MINTEMP
|
||||
scaled = base / max
|
||||
speed = int(scaled * (MAXSPEED - MINSPEED) + MINSPEED)
|
||||
for i in range(2, 7):
|
||||
speeds.append(str(i) + ":" + str(speed))
|
||||
iterateFans(speeds)
|
||||
#print(speeds)
|
||||
time.sleep(1)
|
||||
|
||||
if args.info is False and args.fanplusspeed == []:
|
||||
print("Nothing to do! See --help for usage.")
|
||||
quit
|
||||
if args.fanplusspeed != []:
|
||||
iterateFans(args.fanplusspeed)
|
||||
if args.info is True:
|
||||
if fanChanged is True:
|
||||
print("\nWaiting for fans to adjust...")
|
||||
|
@ -1,5 +1,6 @@
|
||||
#!/usr/bin/python3
|
||||
import subprocess as sp
|
||||
import json
|
||||
|
||||
def setSpeed(fan, setspeed):
|
||||
speeds, speedsRaw = getAllSpeeds()
|
||||
@ -46,3 +47,10 @@ def getFanInfo():
|
||||
faninfo[index] += "%"
|
||||
#print(faninfo[index])
|
||||
return faninfo
|
||||
|
||||
def getTemp():
|
||||
cmdoutput = sp.Popen(["sensors", "-Aj", "zenpower-*"], stdout=sp.PIPE)
|
||||
sensorjson, err = cmdoutput.communicate()
|
||||
sensordata = json.loads(sensorjson)
|
||||
temp = sensordata["zenpower-pci-00c3"]["Tdie"]["temp1_input"]
|
||||
return temp
|
||||
|
Loading…
x
Reference in New Issue
Block a user