diff --git a/fancontrol.py b/fancontrol.py index 992942f..eb9530e 100755 --- a/fancontrol.py +++ b/fancontrol.py @@ -35,7 +35,47 @@ for chk_device in devices_to_check: out = check_output(["sg_ses", dev_node], stderr=STDOUT) if 'ThinkServerSA120' in out: device = dev_node - break + print("Enclosure found on " + device) + + print_speeds(device) + print("Reading current configuration...") + out = check_output(["sg_ses", "-p", "0x2", device, "--raw"]).decode('utf-8') + s = out.split() + + for i in range(0, 6): + print("Setting fan {} to {}".format(i, fan)) + idx = 88 + 4 * i + s[idx + 0] = "80" + s[idx + 1] = "00" + s[idx + 2] = "00" + s[idx + 3] = format(1 << 5 | fan & 7, "x") + + output = StringIO() + off = 0 + count = 0 + line = '' + + while True: + output.write(s[off]) + off = off + 1 + count = count + 1 + if count == 8: + output.write(" ") + elif count == 16: + output.write("\n") + count = 0 + else: + output.write(" ") + if off >= len(s): + break + + output.write("\n") + p = Popen(['sg_ses', '-p', '0x2', device, '--control', '--data', '-'], stdout=PIPE, stdin=PIPE, + stderr=PIPE) + print("Set fan speeds... Waiting to get fan speeds (ctrl+c to skip)") + print(p.communicate(input=bytearray(output.getvalue(), 'utf-8'))[0].decode('utf-8')) + time.sleep(10) + print_speeds(device) except: print("Enclosure not found on " + dev_node) @@ -43,43 +83,3 @@ if device == "": print("Could not find enclosure") sys.exit(1) -print("Enclosure found on " + device); - -print_speeds(device) -print("Reading current configuration...") -out = check_output(["sg_ses", "-p", "0x2", device, "--raw"]).decode('utf-8') -s = out.split() - -for i in range(0, 6): - print("Setting fan {} to {}".format(i, fan)) - idx = 88 + 4 * i - s[idx + 0] = "80" - s[idx + 1] = "00" - s[idx + 2] = "00" - s[idx + 3] = format(1 << 5 | fan & 7, "x") - -output = StringIO() -off = 0 -count = 0 -line = '' - -while True: - output.write(s[off]) - off = off + 1 - count = count + 1 - if count == 8: - output.write(" ") - elif count == 16: - output.write("\n") - count = 0 - else: - output.write(" ") - if off >= len(s): - break - -output.write("\n") -p = Popen(['sg_ses', '-p', '0x2', device, '--control', '--data', '-'], stdout=PIPE, stdin=PIPE, stderr=PIPE) -print("Set fan speeds... Waiting to get fan speeds (ctrl+c to skip)") -print(p.communicate(input=bytearray(output.getvalue(), 'utf-8'))[0].decode('utf-8')) -time.sleep(10) -print_speeds(device)