diff --git a/config-example.yaml b/config-example.yaml index 485d87b..1dcda25 100644 --- a/config-example.yaml +++ b/config-example.yaml @@ -1,4 +1,5 @@ loglevel: DEBUG +interval: 1 thermalzones: - name: GPU+SYSTEM @@ -16,7 +17,7 @@ thermalzones: source: coretemp/temp1_input factor: 1000 fan: - - it8686/pwm1 + - it8686/pwm1: [100, 200] target: 50 pid: p: 1 diff --git a/pyfan.py b/pyfan.py index aadab04..399ea7d 100644 --- a/pyfan.py +++ b/pyfan.py @@ -36,14 +36,24 @@ class ThermalZone: def eval(self): if self.get_temp(): diff = self.target - self.get_temp() - val = self.pid(diff) + val = int(self.pid(diff)) try: for target_fan in self.fans: if type(target_fan) is dict: - self.write_sysfs(list(target_fan.keys())[0], min(int(val), list(target_fan.values())[0])) + fan = list(target_fan.keys())[0] + fan_val = list(target_fan.values())[0] + + if type(fan_val) is list: + if len(fan_val) < 2: + logging.getLogger("pyfan").warning( + "[%s] max/min for %s was not set correctly (%s)" % (self.name, fan, fan_val)) + + self.write_sysfs(fan, min(fan_val[1], max(val, fan_val[0]))) + else: + self.write_sysfs(fan, min(val, fan_val)) else: - self.write_sysfs(target_fan, int(val)) + self.write_sysfs(target_fan, val) except OSError as err: logging.getLogger("pyfan").warning( "[%s] Failed to set pwm, trying to reset it. (%s)" % (self.name, err.strerror)) @@ -74,8 +84,8 @@ class ThermalZone: else: self.set_pwm_mode(target_fan, value) except FileNotFoundError as err: - logging.getLogger("pyfan").warning("[%s] pwm not found. Not ready yet or wrong path? (%s)" % (self.name, - err.strerror)) + logging.getLogger("pyfan").warning("[%s] pwm not found." + " Not ready yet or wrong path? (%s)" % (self.name, err.strerror)) def replace_alias(self, path): replaced = self.alias_replace.sub(lambda x: self.hwmap[x.group()], path) @@ -111,6 +121,11 @@ class PyFan: self.hwmon_map = {} self.gen_hwmon_map() + if self.config["interval"]: + self.interval = self.config["interval"] + else: + self.interval = 1 + for zone in self.config["thermalzones"]: self.zones.append(ThermalZone(zone, self.hwmon_map)) @@ -147,6 +162,6 @@ if __name__ == "__main__": while True: try: pyfan.eval() - sleep(1) + sleep(pyfan.interval) except KeyboardInterrupt: sys.exit(0)