diff --git a/scripts/hw-sensors b/scripts/hw-sensors new file mode 100755 index 00000000..d4665466 --- /dev/null +++ b/scripts/hw-sensors @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +"""Wizard Kit: Hardware Sensors""" +# vim: sts=2 sw=2 ts=2 + +import platform + +import wk + + +def main(): + """Show sensor data on screen.""" + sensors = wk.hw.sensors.Sensors() + if platform.system() == 'Darwin': + wk.std.clear_screen() + while True: + print('\033[100A', end='') + sensors.update_sensor_data() + wk.std.print_report(sensors.generate_report('Current', 'Max')) + wk.std.sleep(1) + elif platform.system() == 'Linux': + proc = wk.exe.run_program(cmd=['mktemp']) + sensors.start_background_monitor( + out_path=proc.stdout.strip(), + exit_on_thermal_limit=False, + temp_labels=('Current', 'Max'), + ) + watch_cmd = [ + 'watch', + '--color', + '--exec', + '--no-title', + '--interval', '1', + 'cat', + proc.stdout.strip(), + ] + wk.exe.run_program(watch_cmd, check=False, pipe=False) + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + pass + except SystemExit: + raise + except: #pylint: disable=bare-except + wk.std.major_exception() diff --git a/scripts/wk/hw/sensors.py b/scripts/wk/hw/sensors.py index dcf304be..9b321674 100644 --- a/scripts/wk/hw/sensors.py +++ b/scripts/wk/hw/sensors.py @@ -115,7 +115,9 @@ class Sensors(): # Done return report - def monitor_to_file(self, out_path, temp_labels=None, thermal_action=None): + def monitor_to_file( + self, out_path, + exit_on_thermal_limit=True, temp_labels=None, thermal_action=None): """Write report to path every second until stopped. thermal_action is a cmd to run if ThermalLimitReachedError is caught. @@ -127,7 +129,7 @@ class Sensors(): # Start loop while True: try: - self.update_sensor_data() + self.update_sensor_data(exit_on_thermal_limit) except ThermalLimitReachedError: if thermal_action: run_program(thermal_action, check=False) @@ -160,7 +162,8 @@ class Sensors(): source_data[temp_label] = sum(temps) / len(temps) def start_background_monitor( - self, out_path, temp_labels=None, thermal_action=None): + self, out_path, + exit_on_thermal_limit=True, temp_labels=None, thermal_action=None): """Start background thread to save report to file. thermal_action is a cmd to run if ThermalLimitReachedError is caught. @@ -171,7 +174,7 @@ class Sensors(): self.out_path = pathlib.Path(out_path) self.background_thread = start_thread( self.monitor_to_file, - args=(out_path, temp_labels, thermal_action), + args=(out_path, exit_on_thermal_limit, temp_labels, thermal_action), ) def stop_background_monitor(self):