From a893f476046f5d1e2864682f37e5679c61662aa4 Mon Sep 17 00:00:00 2001 From: Alfredo Monclus Date: Tue, 15 Mar 2022 12:41:47 -0300 Subject: [PATCH] Show fan speed according to max_power and off_below (#543) fixes #444 --- ks_includes/printer.py | 16 ++++++++++++++++ panels/fan.py | 13 ++++++++----- panels/job_status.py | 2 +- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/ks_includes/printer.py b/ks_includes/printer.py index 671a7452..a2f3af97 100644 --- a/ks_includes/printer.py +++ b/ks_includes/printer.py @@ -291,6 +291,22 @@ class Printer: return self.devices[dev][stat] return None + def get_fan_speed(self, fan="fan", speed=None): + if fan not in self.config: + logging.debug("Error getting %s config", fan) + return speed if speed is not None else 0 + if speed is None and "speed" in self.data[fan]: + speed = self.data[fan]["speed"] + if 'max_power' in self.config[fan]: + max_power = float(self.config[fan]['max_power']) + if max_power > 0: + speed = speed / max_power + if 'off_below' in self.config[fan]: + off_below = float(self.config[fan]['off_below']) + if speed < off_below: + speed = 0 + return speed + def get_extruder_count(self): return self.extrudercount diff --git a/panels/fan.py b/panels/fan.py index f09512ad..c8a2116c 100644 --- a/panels/fan.py +++ b/panels/fan.py @@ -46,7 +46,7 @@ class FanPanel(ScreenPanel): for fan in self.devices: if fan in data and "speed" in data[fan]: - self.update_fan_speed(fan, data[fan]["speed"]) + self.update_fan_speed(fan, self._printer.get_fan_speed(fan, data[fan]["speed"])) def update_fan_speed(self, fan, speed): if fan not in self.devices: @@ -74,10 +74,7 @@ class FanPanel(ScreenPanel): frame.set_property("shadow-type", Gtk.ShadowType.NONE) frame.get_style_context().add_class("frame-item") - try: - self.fan_speed[fan] = float(self._printer.get_data()[fan]["speed"]) - except Exception: - self.fan_speed[fan] = 0 + self.fan_speed[fan] = float(self._printer.get_fan_speed(fan)) name = Gtk.Label() if fan == "fan": @@ -155,3 +152,9 @@ class FanPanel(ScreenPanel): else: f = " ".join(fan.split(" ")[1:]) self._screen._ws.klippy.gcode_script("SET_FAN_SPEED FAN=%s SPEED=%s" % (f, float(value)/100)) + # Check the speed in case it wasn't applied + GLib.timeout_add_seconds(1, self.check_fan_speed, fan) + + def check_fan_speed(self, fan): + self.update_fan_speed(fan, self._printer.get_fan_speed(fan)) + return False diff --git a/panels/job_status.py b/panels/job_status.py index 4b7cb9c4..1d337ae7 100644 --- a/panels/job_status.py +++ b/panels/job_status.py @@ -404,7 +404,7 @@ class JobStatusPanel(ScreenPanel): self.labels['speed'].set_text("%3d%%" % self.speed) if "fan" in data and "speed" in data['fan']: - self.fan = int(round(data['fan']['speed'], 2)*100) + self.fan = int(round(self._printer.get_fan_speed("fan", data['fan']['speed']), 2)*100) self.labels['fan'].set_text("%3d%%" % self.fan) self.state_check()