import os.path import sys import json sys.path.append('/usr/share/sonic/platform/plugins') import pddfparse class ThermalUtil: def __init__(self): global pddf_obj global plugin_data with open(os.path.join(os.path.dirname(os.path.realpath(__file__)) + '/../pddf/pd-plugin.json')) as pd: plugin_data = json.load(pd) pddf_obj = pddfparse.PddfParse() self.platform = pddf_obj.get_platform() self.num_thermals = self.platform['num_temps'] self.info = [] def get_num_thermals(self): return (self.num_thermals) def get_thermal_info(self): list = [] pddf_obj.get_device_list(list, "TEMP_SENSOR") list.sort() for dev in list: data = {} device_name = dev['dev_info']['device_name'] topo_info = dev['i2c']['topo_info'] label = "%s-i2c-%d-%x" % (topo_info['dev_type'], int(topo_info['parent_bus'], 0), int(topo_info['dev_addr'], 0)) attr_list = dev['i2c']['attr_list'] data['device_name'] = device_name data['label'] = label for attr in attr_list: attr_name = attr['attr_name'] node = pddf_obj.get_path(device_name, attr_name) if node is None: return False try: with open(node, 'r') as f: attr_value = int(f.read()) except IOError: return False data[attr_name] = attr_value/float(1000) self.info.append(data) def show_thermal_temp_values(self, idx): if idx < 1 or idx > self.num_thermals: print("Invalid temperature sensor idx %d" % idx) return None self.get_thermal_info() thermal_name = "TEMP"+"%d" % idx label = "" value = "" for temp in self.info: if thermal_name == temp['device_name']: label = temp['label'] value = "temp1\t %+.1f C (high = %+.1f C, hyst = %+.1f C)" % ( temp['temp1_input'], temp['temp1_max'], temp['temp1_max_hyst']) else: continue return (label, value) def show_temp_values(self): self.get_thermal_info() for temp in self.info: print(temp['label']) print("temp1\t %+.1f C (high = %+.1f C, hyst = %+.1f C)" % (temp['temp1_input'], temp['temp1_max'], temp['temp1_max_hyst'])) def dump_sysfs(self): return pddf_obj.cli_dump_dsysfs('temp-sensors')