web查询传感器,部分传感器数值显示为空

答案内容由AI生成,仅供参考:

Web界面部分传感器数值显示为空问题分析与解决方案

问题描述

在使用web界面查询门限传感器时,部分传感器(如风扇转速 FAN2FAN3 等)的当前值和状态偶发性地显示为空(显示为 --),而其他传感器正常。该问题为无规律偶现,且通过底层命令行查询发现相关传感器数据实际存在。

此外,lsprop 命令显示部分传感器的 Status 属性为 "Disabled",表明其处于禁用状态,这可能是当前值无法正常显示的原因之一。


根本原因分析

根据提供的知识图谱数据文档内容以及用户反馈信息,可能导致此问题的因素如下:

1. 传感器状态为 Disabled 导致Web界面不更新值

  • lsprop 输出中:
    bmc.kepler.Systems.ThresholdSensorDisplay
        Status="Disabled"
    
    表明该传感器虽然有有效的读数(ReadingDisplay="3299.000"),但其状态被标记为“禁用”。
  • 根据 KG 实体说明Status 是传感器的关键属性,用于指示操作状态。当状态为 Disabled 时,Web界面可能会停止渲染其读数,即使底层数据源仍可访问。
  • 参考文档《传感器管理常见问题指南》:传感器处于“禁止扫描或扫描异常”状态时,其值应为 na,界面显示为空是符合逻辑的行为。

2. Scanner 数据获取暂时失败导致显示为空

  • 知识库中的 Document Chunk 3 提到:

    “有时候会显示为空的(即为两条横杠),然后刷新web重新获取又能正常显示。”

  • 并伴随以下日志错误:
    Failed to get all properties on interface bmc.kepler.Scanner...
    chip: Smc_FanBoardSMC_0101, bus: I2c 4, read failed...
    
    表明 Scanner 组件在尝试读取硬件(如I2C设备)时发生通信失败,导致 ScannerStatus 变为 1(SCAN_FAILURE),进而触发传感器状态变为 Disabled 或读值为 na

3. 扫描机制防抖与恢复逻辑的影响

  • 根据 KG 中 Status 属性定义Search Result 1 中的描述,ScannerStatus 有多个状态:

    状态码 含义
    0 正常获取值(SCAN_NORMAL)
    1 获取值失败(SCAN_FAILURE)
    2 获取值预失败(SCAN_PRE_FAILURE)
    3 不可访问
    4 初始未扫描
  • Scanner 连续N个周期读取失败后,会被置为 SCAN_FAILURE,并可能导致对应传感器自动禁用(Status="Disabled"),从而在Web界面上显示为空。

4. Web前端未正确同步后端实时状态

  • 尽管 ThresholdSensorDisplay.ReadingDisplay="3299.000" 在D-Bus上有值,但因 Status="Disabled",Web界面可能选择性忽略其 ReadingDisplay 字段,导致显示为空。
  • KG 关系:“ThresholdSensor 的值不显示在Web界面上,尽管后端扫描正确” 也明确指出这是一种已知的 前端展示层缺陷

解决方案建议

:white_check_mark: 方案一:检查并启用被禁用的传感器

使用 busctl 检查传感器的完整状态,并尝试重新启用:

# 查看传感器完整属性
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Systems/ThresholdSensor_FanSpeed_01010604 \
       bmc.kepler.object.Properties GetAll s bmc.kepler.Systems.ThresholdSensorDisplay

# 检查 Scanner 对应对象的状态(例如 Scanner_Fan3_FSpeed)
busctl --user introspect bmc.kepler.hwproxy /bmc/kepler/Scanner/Scanner_Fan3_FSpeed_010106

若确认 Scanner 存在读取失败,请检查I2C通信链路或相关固件状态。


:white_check_mark: 方案二:排查硬件/I2C通信问题

  • 使用以下命令测试底层I2C读取是否稳定:
    # 示例:读取特定I2C地址上的寄存器(具体地址需参考硬件设计)
    devmem 0x96
    
  • 检查风扇板CPLD(BC83FDCA_CPLD V0.05)是否存在已知bug或版本兼容性问题。
  • 升级相关CPLD或BMC固件至最新版本,修复潜在通信异常。

:white_check_mark: 方案三:优化Web界面展示逻辑(前端修复)

由于 ThresholdSensorDisplay 是由 sensor 组件自动解析生成的类,且其 ReadingDisplay 已具备有效值,建议:

  • 修改 web UI 逻辑,在 Status="Disabled"ReadingDisplay 有值的情况下,仍然展示当前读数,并以不同颜色提示状态异常。
  • 或增加“上次有效值”缓存机制,在短暂通信中断时不直接清空显示。

:light_bulb: 提示:用户“hkzy Hewei”曾在类似问题中指出:“webui代码是开源的,你们可以自己上去改” —— 若项目允许,可自行提交前端修复补丁。


:white_check_mark: 方案四:确认传感器总数是否超过255限制

  • 用户 wanghaozhou 明确指出:“传感器超出 255 个,超出部分的传感器信息异常”。
  • 当前传感器 SensorNumber=177 虽未超限,但仍需全局确认系统中所有传感器总数。
  • 使用以下命令统计:
    busctl --user tree bmc.kepler.sensor | grep -c ThresholdSensor
    
  • 若接近或超过255,需优化传感器配置策略,避免资源冲突。

总结

项目 内容
现象 Web界面部分传感器值偶发显示为 --
根本原因 Scanner 读取失败 → 导致 Status="Disabled" → Web界面不渲染数值
关键证据 Status="Disabled",但 ReadingDisplay 有值;I2C读失败日志
解决方案 1. 检查I2C通信稳定性
2. 排查CPLD/BMC版本
3. 修复Web界面展示逻辑
4. 验证传感器总数不超过255
推荐措施 升级至开放讨论群组已修复版本(如 2512),并启用更健壮的扫描防抖机制

:warning: 建议升级 BMC 版本至 2512 或更高,因 wanghaozhou 已确认:“传感器数量超过255的问题已在 v2512 修复”。

相关链接:

  1. web上阈值传感器的读值概率性显示为空的问题
  2. 关机状态下风扇信息页面占空比显示不为0%
  3. 传感器一本通
  4. ipmitool sensor返回值显示风扇转速为0,实际web和资源树转速都有
  5. 传感器管理常见问题指南 | 文档中心 | openUBMC