diff options
author | Evgenii <shavrin0591@gmail.com> | 2021-02-17 22:59:57 +0300 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2021-02-19 18:44:28 -0500 |
commit | 3d35c003db3d4fd25a3cadde1e70373cf450e2f7 (patch) | |
tree | 0eb4ec275a8c5572fa37e7ef20470093e974da31 /klippy/extras/temperature_host.py | |
parent | 267a2f3a38cafd1949a9e276b7020030e9c9c0a4 (diff) | |
download | kutter-3d35c003db3d4fd25a3cadde1e70373cf450e2f7.tar.gz kutter-3d35c003db3d4fd25a3cadde1e70373cf450e2f7.tar.xz kutter-3d35c003db3d4fd25a3cadde1e70373cf450e2f7.zip |
temperature_host: Rename rpi_temperature and add support for custom paths
Signed-off-by: Evgenii Shavrin <shavrin0591@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extras/temperature_host.py')
-rw-r--r-- | klippy/extras/temperature_host.py | 82 |
1 files changed, 82 insertions, 0 deletions
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 <al3ph@users.noreply.github.com> +# +# 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 |