Sensor readings as 1-byte

James Feist james.feist at linux.intel.com
Sat Apr 14 01:41:05 AEST 2018


There is an RFC I posted that calculates the M, B, and exponents from
the D-Bus sensor endpoints: https://gerrit.openbmc-project.xyz/#/c/8521/

We were hoping to roll this into host-ipmi sometime in future.

Thanks,

James Feist

On 04/12/2018 07:41 PM, guhan balasubramanian wrote:
> Hi Tom,
> 
> Thanks for the explanation. But I still see some concerns in this 
> conversion logic.
> 
> For input, we have 4 given parameters as
>      1. Min and Max values of the sensor (y)
>      2. the Min and Max values of the byte value (x - assuming this is 
> always 0 to 255).
> 
> For output, we have 4 paramters to calculate
>      1. multiplierM (M)
>      2. offsetB (B)
>      3. bExp (k1)
>      4. rExp (k2)
> 
> We have two equations to compute 4 variables in this logic.
> 
> 
> On Sat, Mar 10, 2018 at 9:45 AM, Tom Joseph <tomjose at linux.vnet.ibm.com 
> <mailto:tomjose at linux.vnet.ibm.com>> wrote:
> 
>     Hello Guhan,
> 
>     The updated sensor-example.yaml has the Rexp field as well. These
>     values are  calculated based on the minimum and maximum value of the
>     sensor.
> 
>     If a temperature sensor has a range of -127 - +128, means y is -127
>     to +128 and the range of x is 0-255.
>     By substituting x = 0 and y = -127 (k2 is the decimal precision and
>     assume in this case as whole nos) implies Bexp = -127.
>     Similarly substitute x = 255 and y = 128 and M is evaluated as 1.
> 
> 
> In the above example, with 2 values [(0, -127) and (255, 128)] for (x,y) 
> we were able to calculate M and B. We are assuming k2 as 0 since we are 
> taking only whole numbers for our ranges (y values). But we are still 
> assuming the values for k1 as 0.
> 
> 
>     Regards,
>     Tom
> 
> 
>     On Saturday 10 March 2018 08:01 AM, guhan balasubramanian wrote:
>>     Hi,
>>
>>     According to the IPMI spec, we represent all sensor readings
>>     (Volt, Temp, Amp, etc.) as 1-byte.
>>
>>     Since we represent them as 1-byte, we use a linearization formula
>>     to convert to actual value as follows:
>>
>>     y = (M*x + B*10^(k1))*10^(k2)
>>
>>     where x is the 1-byte value that is filled in the get sensor
>>     reading command.
>>
>>     We see in the ipmitool example on how an example of 3.36 V is
>>     represented as 1-byte.
>>     https://computercheese.blogspot.com/2013/10/ipmi-sensor-reading-conversion-formula.html?q=sensor
>>     <https://computercheese.blogspot.com/2013/10/ipmi-sensor-reading-conversion-formula.html?q=sensor>
>>
>>     Can any one please help on how the values for M, B, k1 and k2 are
>>     populated for each sensor?
>>
>>     In the openbmc repo, I believe these values are present in the
>>     config.yaml of phosphor-ipmi-sensor-inventory (based on the
>>     following sample).
>>
>>     0xF1:
>>       sensorType: 0x01
>>       path: /xyz/openbmc_project/sensors/temperature/temp1
>>       sensorReadingType: 0x01
>>     *multiplierM*: 511
>>     *offsetB*: 0
>>     *bExp*: 0
>>       mutability: Mutability::Write|Mutability::Read
>>       serviceInterface: org.freedesktop.DBus.Properties
>>       readingType: readingData
>>       interfaces:
>>         xyz.openbmc_project.Sensor.Value:
>>           Value:
>>             Offsets:
>>               0x0:
>>                 type: int64_t
>>
>>
>>     Thanks,
>>     Guhan
>>
> With the given information, do you think there is a generic way 
> (algorithm) where we can compute all the 4 variables M, B, k1 and k2?
> 
> Thanks,
> Guhan
> 


More information about the openbmc mailing list