问题描述
阈值传感器对象Reading属性有值,但是ReadingDisplay没有值,导致web页面传感器读值为0
环境信息
重现步骤
-
传感器SR配置如下
-
"ThresholdSensor_HddBpPower": {
"OwnerId": 32,
"OwnerLun": 0,
"EntityId": "<=/Entity_InnerHddCard.Id",
"EntityInstance": "<=/Entity_InnerHddCard.Instance",
"Initialization": 127,
"Capabilities": 232,
"SensorType": 11,
"ReadingType": 1,
"SensorName": "FBP${Slot}_Power",
"SensorIdentifier": "FBP${Slot}_Power",
"BaseUnit": 6,
"Analog": 1,
"NominalReading": 25,
"MinimumReading": 0,
"MaximumReading": 255,
"Reading": "<=/Scanner_HddBPPower.Value |> expr((($1 & 255) << 8) | (($1 >> 8) & 255) * 0.25)",
"ReadingStatus": "<=/Scanner_HddBPPower.Status",
"SensorNumber": 255,
"M": 1,
"PositiveHysteresis": 1,
"NegativeHysteresis": 1
}
-
查询相应scanner读值,有值。
-
查询传感器对象。Reading属性有值,但是ReadingDisplay没有值,导致web页面传感器读值为0。
~ ~ $ mdbctl lsprop ThresholdSensor_HddBpPower_01011801 bmc.kepler.Systems.ThresholdSensor
bmc.kepler.Systems.ThresholdSensor
Capabilities=232
EntityId=11
EntityInstance=113
LowerCritical=0
LowerNoncritical=0
LowerNonrecoverable=0
NegativeHysteresis=1
OriginalReading=0
OwnerLun=0
PositiveHysteresis=1
Reading=2
ReadingMask=0
ReadingStatus=0
SensorIdentifier=“FBP1_Power”
SensorName=“FBP1_Power”
SensorNumber=51
SensorType=11
UpperCritical=0
UpperNoncritical=0
UpperNonrecoverable=0
Private
Accuracy=0
Analog=1
AssertMask=0
B=0
BA=0
BaseUnit=6
BelongsToSystem=false
DeassertMask=0
Initialization=127
IsValid=true
Linearization=0
M=1
MT=0
MaximumReading=255
MinimumReading=0
ModifierUnit=0
NominalReading=25
NormalMaximum=0
NormalMinimum=0
OwnerId=32
RBExp=0
ReadingType=1
Unit=0
期望结果
Reading属性跟ReadingDisplay属性同步,web页面传感器读值正常
答案内容由AI生成,仅供参考:
问题分析:阈值传感器 ReadingDisplay 为空导致 Web 读值显示 0
根据提供的传感器配置和查询结果,ThresholdSensor_HddBpPower 对象的 Reading 属性值为 2,但 ReadingDisplay 属性未出现在输出中(即缺失或为 0.000),导致 Web 界面显示传感器读值为 0。
结合知识图谱与相关文档,以下是对该问题的可能原因分析及排查建议。
一、ReadingDisplay 的基本机制
ReadingDisplay 是阈值传感器的一个属性,用于存储和显示格式化后的读值,通常由系统根据 Reading、M、B、RBExp 等系数计算得出(IPMI 标准公式:ReadingDisplay = (M × Reading + B × 10^{RBExp}))。
来源:知识图谱实体 ReadingDisplay 描述。
- 该属性直接影响 Web 界面显示的传感器数值,若其缺失或为
0.000,则 Web 会显示 0。
来源:知识图谱关系 ReadingDisplay → Threshold Sensor:“The ReadingDisplay attribute stores the current value of the sensor for display.”
在用户配置中:
M = 1、B = 0、RBExp = 0 → 预期 ReadingDisplay 应等于 Reading 值 2(格式化后为 "2.000")。
- 但实际输出中没有任何
ReadingDisplay 字段,说明系统未生成该属性或其值为空。
二、可能原因(基于上下文)
1. 传感器 Status 或 ReadingStatus 影响显示
-
北向接口(如 Web)的传感器值直接受本传感器的 ReadingStatus 及 Status 属性影响:
step1 北向接口传感器的值直接受本传感器的ReadingStatus属性及Status属性影响,查看ReadingStatus值是否非0或Status是否为Disabled,在这两种情况下传感器不会显示出读值。
(来源:文档块 ID=1,帖子 #4)
-
用户查询中 ReadingStatus = 0(正常),但 Status 属性未显示。若 Status 为 Disabled,则 Web 无法显示读数,且 ReadingDisplay 可能不会被生成或强制置 0。
Status 受关联 Entity 的状态影响,特别是当 Capabilities 的 bit7 置位时(Capabilities=232,二进制 11101000,bit7 为 1),传感器将被 Entity 的失效状态禁用。
step3 若传感器的Capabilities属性的bit7配置为1,则传感器会受到Entity失效影响会被禁止。当Entity的PowerState或Presence属性为0,则Entity失效,会进一步导致传感器Status为Disabled。
(来源:文档块 ID=1,帖子 #4)
-
建议:使用 busctl get-property bmc.kepler.Systems.ThresholdSensor ThresholdSensor_HddBpPower_01011801 bmc.kepler.Systems.ThresholdSensor Status 查看是否 Disabled;同时检查关联 Entity(Entity_InnerHddCard)的 PowerState 和 Presence 是否为 0。
2. ReadingMask 配置为 0 可能影响显示
-
用户配置中 ReadingMask = 0。根据 IPMI 规范和 CSR 配置:
ReadingMask 决定是否能对外显示门限,配置门限场景使用。
(来源:文档块 ID=10,《CSR配置字典之Sensor类》)
-
虽然 ReadingMask 主要用于门限显示,但某些实现中也可能影响读值本身的对外呈现。0 可能意味着不显示任何读值信息,导致 ReadingDisplay 不被计算或输出。
-
建议:根据实际需要配置 ReadingMask,例如为 0xFFFF 或至少使能读值显示位。
3. 数据源同步表达式问题
4. Unit 等辅助参数配置异常
- 用户配置中
Unit = 0、BaseUnit = 6、ModifierUnit = 0。对于功率传感器,单位应为适当值(如 Unit = 0xC0 用于离散,但此处为阈值传感器,应使用标准单位)。
- 知识图谱指出:
Unit 用于指定传感器单位,错误的 Unit 可能导致显示模块无法解析读值,进而跳过 ReadingDisplay 的生成。
来源:知识图谱实体 DiscreteSensor_PwrCapStatus 关系中提到 Unit 设为 192 (0xC0) 用于离散传感器,阈值传感器应有不同的配置。
- 建议:参考同类传感器正确配置
Unit,例如功率传感器通常 Unit = 0(无单位或无符号)需结合 BaseUnit 解释,但建议检查社区标准配置。
三、排查步骤总结(基于上下文文档)
-
检查 Status 属性
使用 busctl get-property 查看传感器 Status 是否为 Disabled。若为 Disabled,则检查关联 Entity 的 PowerState 和 Presence。
-
验证 ReadingStatus 与 CSR 配置一致性
当前 ReadingStatus = 0 正常,但若 Status 被禁用,仍需从 Entity 角度排查(step3)。
-
审查 ReadingMask 配置
确认是否需要设置合理的 ReadingMask 以允许读值对外显示。
-
简化 Reading 表达式
暂时去掉表达式,使用直接同步(<=/Scanner_HddBPPower.Value)观察 ReadingDisplay 是否出现,以确定是否为表达式转换问题。
-
核对 Unit 及单位相关配置
参考已有正常功率传感器的配置(例如 ThresholdSensor_GPUPower 实例),调整 Unit、BaseUnit、ModifierUnit。
-
收集更多日志
若上述步骤无法定位,根据社区建议提供 vpd 配置信息、传感器名称及一键日志,联系 PAE 进一步分析(来源:文档块 ID=1,帖子 #2)。
四、期望结果
通过上述排查和配置修正,系统应能正常计算出 ReadingDisplay 值(预计为 "2.000"),并使 Web 页面正确显示传感器读值,而不为 0。