aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/heater.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-04-03 17:01:10 -0400
committerKevin O'Connor <kevin@koconnor.net>2018-04-04 23:13:53 -0400
commitaed958eb5c32003c7ffcd10d8852082b6d896794 (patch)
tree8fed6212b4170da3fecefca103cbc70ffa4575ce /klippy/heater.py
parent4eeb43b191e3d928cf817d3be0350711dc05526d (diff)
downloadkutter-aed958eb5c32003c7ffcd10d8852082b6d896794.tar.gz
kutter-aed958eb5c32003c7ffcd10d8852082b6d896794.tar.xz
kutter-aed958eb5c32003c7ffcd10d8852082b6d896794.zip
heater: Add PrinterHeaters class that stores all sensors and heaters
Add a PrinterHeaters class that can stores references to available temperature sensors and stores references to instantiated heaters. Add a extras/heater_bed.py file and delay instantiation of the heater_bed object. This allows the heater.py module to be imported earlier during the setup phase, and allows the PrinterHeaters class to be available for registering sensors and heaters. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/heater.py')
-rw-r--r--klippy/heater.py52
1 files changed, 44 insertions, 8 deletions
diff --git a/klippy/heater.py b/klippy/heater.py
index f3b22886..eb086c25 100644
--- a/klippy/heater.py
+++ b/klippy/heater.py
@@ -104,13 +104,14 @@ PWM_DELAY = REPORT_TIME + SAMPLE_TIME*SAMPLE_COUNT
class error(Exception):
pass
-class PrinterHeater:
+class Heater:
error = error
- def __init__(self, printer, config):
- self.printer = printer
+ def __init__(self, config):
+ printer = config.get_printer()
self.name = config.get_name()
- sensor_params = config.getchoice('sensor_type', Sensors)
- self.sensor = sensor_params['class'](config, sensor_params)
+ sensor_type = config.get('sensor_type')
+ pheater = printer.lookup_object('heater')
+ self.sensor = pheater.setup_sensor(sensor_type, config)
self.min_temp = config.getfloat('min_temp', minval=KELVIN_TO_CELCIUS)
self.max_temp = config.getfloat('max_temp', above=self.min_temp)
self.min_extrude_temp = config.getfloat(
@@ -278,7 +279,42 @@ class ControlPID:
return (abs(temp_diff) > PID_SETTLE_DELTA
or abs(self.prev_temp_deriv) > PID_SETTLE_SLOPE)
+
+######################################################################
+# Sensor and heater lookup
+######################################################################
+
+class PrinterHeaters:
+ def __init__(self, printer, config):
+ self.printer = printer
+ self.sensors = {}
+ self.heaters = {}
+ def add_sensor(self, sensor_type, params):
+ self.sensors[sensor_type] = params
+ def setup_sensor(self, sensor_type, config):
+ if sensor_type not in self.sensors:
+ raise self.printer.config_error("Unknown temperature sensor '%s'" % (
+ sensor_type,))
+ params = self.sensors[sensor_type]
+ return params['class'](config, params)
+ def setup_heater(self, config):
+ heater_name = config.get_name()
+ if heater_name == 'extruder':
+ heater_name = 'extruder0'
+ if heater_name in self.heaters:
+ raise config.error("Heater %s already registered" % (heater_name,))
+ self.heaters[heater_name] = heater = Heater(config)
+ return heater
+ def lookup_heater(self, heater_name):
+ if heater_name == 'extruder':
+ heater_name = 'extruder0'
+ if heater_name not in self.heaters:
+ raise self.printer.config_error(
+ "Unknown heater '%s'" % (heater_name,))
+ return self.heaters[heater_name]
+
def add_printer_objects(printer, config):
- if config.has_section('heater_bed'):
- printer.add_object('heater_bed', PrinterHeater(
- printer, config.getsection('heater_bed')))
+ ph = PrinterHeaters(printer, config)
+ printer.add_object('heater', ph)
+ for sensor_type, params in Sensors.items():
+ ph.add_sensor(sensor_type, params)