From 3d35c003db3d4fd25a3cadde1e70373cf450e2f7 Mon Sep 17 00:00:00 2001 From: Evgenii Date: Wed, 17 Feb 2021 22:59:57 +0300 Subject: temperature_host: Rename rpi_temperature and add support for custom paths Signed-off-by: Evgenii Shavrin Signed-off-by: Kevin O'Connor --- klippy/extras/heaters.py | 2 +- klippy/extras/rpi_temperature.py | 79 ------------------------------------- klippy/extras/temperature_host.py | 82 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 80 deletions(-) delete mode 100644 klippy/extras/rpi_temperature.py create mode 100644 klippy/extras/temperature_host.py (limited to 'klippy') diff --git a/klippy/extras/heaters.py b/klippy/extras/heaters.py index a7aec4fa..cf7fd909 100644 --- a/klippy/extras/heaters.py +++ b/klippy/extras/heaters.py @@ -264,7 +264,7 @@ class PrinterHeaters: return self.heaters[heater_name] def setup_sensor(self, config): modules = ["thermistor", "adc_temperature", "spi_temperature", - "bme280", "htu21d", "lm75", "rpi_temperature", + "bme280", "htu21d", "lm75", "temperature_host", "temperature_mcu", "ds18b20"] for module_name in modules: diff --git a/klippy/extras/rpi_temperature.py b/klippy/extras/rpi_temperature.py deleted file mode 100644 index f49bce1b..00000000 --- a/klippy/extras/rpi_temperature.py +++ /dev/null @@ -1,79 +0,0 @@ -# Support for Raspberry Pi temperature sensor -# -# Copyright (C) 2020 Al Crate -# -# This file may be distributed under the terms of the GNU GPLv3 license. - -import logging - -RPI_REPORT_TIME = 1.0 -PROC_TEMP_FILE = "/sys/class/thermal/thermal_zone0/temp" - -class RPiTemperature: - def __init__(self, config): - self.printer = config.get_printer() - self.reactor = self.printer.get_reactor() - self.name = config.get_name().split()[-1] - - self.temp = self.min_temp = self.max_temp = 0.0 - - self.printer.add_object("rpi_temperature " + self.name, self) - if self.printer.get_start_args().get('debugoutput') is not None: - return - self.sample_timer = self.reactor.register_timer( - self._sample_pi_temperature) - try: - self.file_handle = open(PROC_TEMP_FILE, "r") - except: - raise config.error("Unable to open temperature file '%s'" - % (PROC_TEMP_FILE,)) - - self.printer.register_event_handler("klippy:connect", - self.handle_connect) - - def handle_connect(self): - self.reactor.update_timer(self.sample_timer, self.reactor.NOW) - - def setup_minmax(self, min_temp, max_temp): - self.min_temp = min_temp - self.max_temp = max_temp - - def setup_callback(self, cb): - self._callback = cb - - def get_report_time_delta(self): - return RPI_REPORT_TIME - - def _sample_pi_temperature(self, eventtime): - try: - self.file_handle.seek(0) - self.temp = float(self.file_handle.read())/1000.0 - except Exception: - logging.exception("rpi_temperature: Error reading data") - self.temp = 0.0 - return self.reactor.NEVER - - if self.temp < self.min_temp: - self.printer.invoke_shutdown( - "RPi temperature %0.1f below minimum temperature of %0.1f." - % (self.temp, self.min_temp,)) - if self.temp > self.max_temp: - self.printer.invoke_shutdown( - "RPi temperature %0.1f above maximum temperature of %0.1f." - % (self.temp, self.max_temp,)) - - mcu = self.printer.lookup_object('mcu') - measured_time = self.reactor.monotonic() - self._callback(mcu.estimated_print_time(measured_time), self.temp) - return measured_time + RPI_REPORT_TIME - - def get_status(self, eventtime): - return { - 'temperature': self.temp, - } - - -def load_config(config): - # Register sensor - pheaters = config.get_printer().load_object(config, "heaters") - pheaters.add_sensor_factory("rpi_temperature", RPiTemperature) diff --git a/klippy/extras/temperature_host.py b/klippy/extras/temperature_host.py new file mode 100644 index 00000000..98f29a87 --- /dev/null +++ b/klippy/extras/temperature_host.py @@ -0,0 +1,82 @@ +# Support for Raspberry Pi temperature sensor +# +# Copyright (C) 2020 Al Crate +# +# This file may be distributed under the terms of the GNU GPLv3 license. + +import logging + +HOST_REPORT_TIME = 1.0 +RPI_PROC_TEMP_FILE = "/sys/class/thermal/thermal_zone0/temp" + +class Temperature_HOST: + def __init__(self, config): + self.printer = config.get_printer() + self.reactor = self.printer.get_reactor() + self.name = config.get_name().split()[-1] + self.path = config.get("path", RPI_PROC_TEMP_FILE) + + self.temp = self.min_temp = self.max_temp = 0.0 + + self.printer.add_object("rpi_temperature " + self.name, self) # XXX + self.printer.add_object("temperature_host " + self.name, self) + if self.printer.get_start_args().get('debugoutput') is not None: + return + self.sample_timer = self.reactor.register_timer( + self._sample_pi_temperature) + try: + self.file_handle = open(self.path, "r") + except: + raise config.error("Unable to open temperature file '%s'" + % (self.path,)) + + self.printer.register_event_handler("klippy:connect", + self.handle_connect) + + def handle_connect(self): + self.reactor.update_timer(self.sample_timer, self.reactor.NOW) + + def setup_minmax(self, min_temp, max_temp): + self.min_temp = min_temp + self.max_temp = max_temp + + def setup_callback(self, cb): + self._callback = cb + + def get_report_time_delta(self): + return HOST_REPORT_TIME + + def _sample_pi_temperature(self, eventtime): + try: + self.file_handle.seek(0) + self.temp = float(self.file_handle.read())/1000.0 + except Exception: + logging.exception("temperature_host: Error reading data") + self.temp = 0.0 + return self.reactor.NEVER + + if self.temp < self.min_temp: + self.printer.invoke_shutdown( + "HOST temperature %0.1f below minimum temperature of %0.1f." + % (self.temp, self.min_temp,)) + if self.temp > self.max_temp: + self.printer.invoke_shutdown( + "HOST temperature %0.1f above maximum temperature of %0.1f." + % (self.temp, self.max_temp,)) + + mcu = self.printer.lookup_object('mcu') + measured_time = self.reactor.monotonic() + self._callback(mcu.estimated_print_time(measured_time), self.temp) + return measured_time + HOST_REPORT_TIME + + def get_status(self, eventtime): + return { + 'temperature': self.temp, + } + + +def load_config(config): + # Register sensor + pheaters = config.get_printer().load_object(config, "heaters") + pheaters.add_sensor_factory("temperature_host", Temperature_HOST) + pheaters.add_sensor_factory("rpi_temperature", Temperature_HOST) # XXX -- cgit v1.2.3-70-g09d2