Show fan speed according to max_power and off_below (#543)

fixes #444
This commit is contained in:
Alfredo Monclus 2022-03-15 12:41:47 -03:00 committed by GitHub
parent 2e1fa110de
commit a893f47604
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 6 deletions

View File

@ -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

View File

@ -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

View File

@ -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()