From 077dbd645b682498988af1411e22dfe065be9e56 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Fri, 24 Mar 2023 16:29:02 -0400 Subject: [PATCH] Stage alternate power meter support It may be redundant with SDR sensors, but stage it for easier access should it come up as a needed approach. Change-Id: I765bbcbcc6c916da2573008bf53f2e88a2a35baa --- pyghmi/ipmi/oem/lenovo/energy.py | 21 ++++++++++++++- pyghmi/ipmi/oem/lenovo/imm.py | 44 +++++++++++--------------------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/pyghmi/ipmi/oem/lenovo/energy.py b/pyghmi/ipmi/oem/lenovo/energy.py index 746239b9..ff826e24 100644 --- a/pyghmi/ipmi/oem/lenovo/energy.py +++ b/pyghmi/ipmi/oem/lenovo/energy.py @@ -31,7 +31,9 @@ class EnergyManager(object): try: rsp = ipmicmd.xraw_command(netfn=0x3a, command=0x32, data=[4, 2, 0, 0, 0]) if len(rsp['data']) >= 8: - self.supportedmeters = ('DC Energy',) + self.supportedmeters = ('DC Energy',) # 'GPU Power', + # 'Node Power', 'Total Power') + self._mypowermeters = ('node power', 'total power', 'gpu power', 'riser 1 power', 'riser 2 power') self._usefapm = True return except pygexc.IpmiException: @@ -57,6 +59,23 @@ class EnergyManager(object): else: self.supportedmeters = ('DC Energy',) + def supports(self, name): + if name.lower() in self._mypowermeters: + return True + return False + + def get_sensor(self, name, ipmicmd): + if name.lower() not in self._mypowermeters: + raise pygexc.UnsupportedFunctionality('Unrecogcized sensor') + rsp = ipmicmd.xraw_command(netfn=0x3a, command=0x32, data=[4, 8, 0, 0, 0]) + npow, gpupow, r1pow, r2pow = struct.unpack('