temperature_fan: Add gcode command for temperature_fan.py (#1520)

Adding gcode command for setting the target temperature of temperature_fan.
Example gcode: SET_TEMPERATURE_FAN_TARGET temperature_fan=chamber target=35.0

Signed-off-by: Martin Nowroth <madnoth@gmail.com>
This commit is contained in:
Martin Nowroth 2019-04-16 03:13:29 +02:00 committed by KevinOConnor
parent 1102c6c232
commit 60bc93f36b
1 changed files with 18 additions and 1 deletions

View File

@ -15,6 +15,7 @@ class TemperatureFan:
self.name = config.get_name().split()[1]
self.printer = config.get_printer()
self.fan = fan.PrinterFan(config, default_shutdown_speed=1.)
self.gcode = self.printer.lookup_object('gcode')
self.min_temp = config.getfloat('min_temp', minval=KELVIN_TO_CELCIUS)
self.max_temp = config.getfloat('max_temp', above=self.min_temp)
self.sensor = self.printer.lookup_object('heater').setup_sensor(config)
@ -26,14 +27,20 @@ class TemperatureFan:
self.min_speed = config.getfloat('min_speed', 0.3, above=0., maxval=1.)
self.last_temp = 0.
self.last_temp_time = 0.
self.target_temp = config.getfloat(
self.target_temp_conf = config.getfloat(
'target_temp', 40. if self.max_temp > 40. else self.max_temp,
minval=self.min_temp, maxval=self.max_temp)
self.target_temp = self.target_temp_conf
algos = {'watermark': ControlBangBang, 'pid': ControlPID}
algo = config.getchoice('control', algos)
self.control = algo(self, config)
self.next_speed_time = 0.
self.last_speed_value = 0.
self.gcode.register_mux_command(
"SET_TEMPERATURE_FAN_TARGET", "TEMPERATURE_FAN", self.name,
self.cmd_SET_TEMPERATURE_FAN_TARGET_TEMP,
desc=self.cmd_SET_TEMPERATURE_FAN_TARGET_TEMP_help)
def set_speed(self, read_time, value):
if value <= 0.:
value = 0.
@ -58,6 +65,16 @@ class TemperatureFan:
return self.min_speed
def get_max_speed(self):
return self.max_speed
cmd_SET_TEMPERATURE_FAN_TARGET_TEMP_help = "Sets a temperature fan target"
def cmd_SET_TEMPERATURE_FAN_TARGET_TEMP(self, params):
temp = self.gcode.get_float('TARGET', params, self.target_temp_conf)
self.set_temp(temp)
def set_temp(self, degrees):
if degrees and (degrees < self.min_temp or degrees > self.max_temp):
raise self.gcode.error(
"Requested temperature (%.1f) out of range (%.1f:%.1f)"
% (degrees, self.min_temp, self.max_temp))
self.target_temp = degrees
######################################################################
# Bang-bang control algo