sensor.yaml文件配置
此文件主要是用作转换成IPMI sdr list格式的配置文件
配置参考:
配置信息解释:
153:Sensor Number。
bExp:上式中的k1。
interfaces: xyz.openbmc_project.Sensor.Value: Value:获取Value值的接口。
type: double:类型为double
multiplierM: 2:上式中的M值为2。
path: /xyz/openbmc_project/sensors/voltage/P3V3:该Sensor的Path。
rExp: -2:上式中的k2。
sensorType: 2:IPMI标准规范对应的SensorType,电压为0x02。
unit: xyz.openbmc_project.Sensor.Value.Unit.Volts:单位。
发送IPMI命令后获取到的信息如下图:
由于使用IPMI命令获取SDR信息时,它所传输的数据以1个字节进行存储,最大表示范围是[0,255],因此,我们需要根据IPMI文档对其进行一定的处理,需要根据以下公式进行转换。
在发送ipmitool sdr list命令后,会根据相应的Sensor名称,通过busctl call命令获取到相关Value值。之后将所获取数值作为y值代入上式,求出x值,作为传输的数据,要注意的是上式中x是一个无符号整型、占据1字节的数据。之后到达用户端,再将x值代入求得实际Value值。
例:
PSU_VIN : 最大阈值230V
multiplierM=(最大阈值 - offsetB10 ^bExp) /255向上取整数。
M最大255 得出offsetB=165 bExp = 3 rExp控制小数位 = -3
PSU_Vout:最大值 13V
offsetB = 0 bExp = 0 则 M=52 rExp控制小数位 = -3
参考下面说法:
multiplierM #ipmi协议中的算子,一般multiplierM*255 要稍大于可能的最大值,以保证精度
offsetB #偏移量
bExp #offsetB的指数,一般给0
unit #传感器单位,配置文件做了转换为字符串,具体见ipmi协议2.0中42.17小节
scale #缩放因子,是10的指数,一般温度电压等都是-3,即读取值是实际值的1000倍
rExp #和scale一样的指数,一般给0
1、scale是用于ipmid程序将从传感器中得到的值转化成实际值,一般hwmonz子系统中,传感器驱动创建的文件中存放的都是将实际值放大1000倍的值,因此sclae=-3 。如果自己写的驱动或者创建的文件中存放的值是实际值,则scale=0。
如hwmon子系统创建的文件 /sys/class/hwmon/hwmon1/temp1_input中的值是52000,则scal=-3。
如自己创建的文件/var/hwmon/hwmon0/temp1_input中值是52,则scale=0。
2、ipmi协议中一般阈值型传感器是有计算公式的(参见ipmi协议2.0的36.3小节),在ipmid程序中需要通过计算得到公式的中x值,并返回给发起者(netfn=04,cmd=0x21)。
3、配置文件中配置这些值会转化到ipmi协议数据中(multiplierM一个字节,offsetB一个字节,bExp(低4bits)和rExp(高4bits)一个字节,具体参见ipmi协议第43小节),命令发起者得到数据后,利用公式计算得到实际值,计算值的范围是[ offsetB * 10 ^bExp, multiplierM255 + offsetB * 10 ^bExp] * 10 ^rExp。在不考虑rExp和offsetB的情况下(rExp=bExp=0),计算值y的最大范围是[0,65025](此时 multiplierM=255)。
4、一般除了温度外,offsetB=0,rExp=-3,即计算值y的最大范围是[0, 65.25],为了保证精度,我们可以调小multiplierM值,尽量使最大值稍大于阈值中设置的最大值。快速计算:multiplierM=(最大阈值 - offsetB10 ^bExp) /255向上取整数。
例如例如12V的电压传感器,假设阈值中设置最大上限值是14V,则可以设置 multiplierM = 14000/255 ≈55(向上取整),即配置文件中内容如下:
multiplierM=55
offsetB=0
bExp=0
scale=-3
rExp=-3
5、 一般温度传感器multiplierM=1,offsetB=-127,scale =-3, bExp =0,rExp=0,计算的y值范围是[-127,128]基本满足正常使用情况。
一般温度下限可能到不了-127,我们可以调整offsetB为-100,这样取值范围是[-100, 155]。
如果想提高精度,可以給rExp=-2, bExp=2,multiplierM=100,offsetB=-100,这样取值范围是[-100,155],并且可以显示两位小数。