diff --git a/selfdrive/hardware/base.py b/selfdrive/hardware/base.py index 359125f9ce..2fe0d1c95a 100644 --- a/selfdrive/hardware/base.py +++ b/selfdrive/hardware/base.py @@ -1,3 +1,5 @@ +import json +import subprocess from abc import abstractmethod from collections import namedtuple @@ -18,6 +20,17 @@ class HardwareBase: except Exception: return default + @staticmethod + def get_nvme_temps(): + ret = [] + try: + out = subprocess.check_output("sudo smartctl -aj /dev/nvme0", shell=True) + dat = json.loads(out) + ret = list(map(int, dat["nvme_smart_health_information_log"]["temperature_sensors"])) + except Exception: + pass + return ret + @abstractmethod def reboot(self, reason=None): pass diff --git a/selfdrive/thermald/thermald.py b/selfdrive/thermald/thermald.py index b325a08e94..06eeecd7da 100755 --- a/selfdrive/thermald/thermald.py +++ b/selfdrive/thermald/thermald.py @@ -178,6 +178,7 @@ def thermald_thread(): network_info = None modem_version = None registered_count = 0 + nvme_temps = None current_filter = FirstOrderFilter(0., CURRENT_TAU, DT_TRML) temp_filter = FirstOrderFilter(0., TEMP_TAU, DT_TRML) @@ -258,12 +259,13 @@ def thermald_thread(): params.clear_all(ParamKeyType.CLEAR_ON_PANDA_DISCONNECT) pandaState_prev = pandaState - # get_network_type is an expensive call. update every 10s + # these are expensive calls. update every 10s if (count % int(10. / DT_TRML)) == 0: try: network_type = HARDWARE.get_network_type() network_strength = HARDWARE.get_network_strength(network_type) network_info = HARDWARE.get_network_info() # pylint: disable=assignment-from-none + nvme_temps = HARDWARE.get_nvme_temps() # Log modem version once if modem_version is None: @@ -292,6 +294,8 @@ def thermald_thread(): msg.deviceState.networkStrength = network_strength if network_info is not None: msg.deviceState.networkInfo = network_info + if nvme_temps is not None: + msg.deviceState.nvmeTempC = nvme_temps msg.deviceState.batteryPercent = HARDWARE.get_battery_capacity() msg.deviceState.batteryCurrent = HARDWARE.get_battery_current()