CSR配置字典之Sensor类
更新时间:2025/7/22
在Gitcode上查看源码

📋 文档信息

项目内容
文档标题Sensor类配置字典
版本v1.0
创建日期2025-01-27
最后更新2025-01-27
维护状态✅ 活跃维护

📋 变更历史记录

文档变更记录

版本发布日期变更类型变更内容影响范围维护人员
v1.02025-01-27初始版本创建Sensor类配置字典全新文档系统管理员

🎯 类概览

Sensor 类系统

属性
类名称Sensor (Entity + ThresholdSensor + DiscreteSensor)
功能描述传感器管理系统,包含实体管理(Entity)、门限传感器(ThresholdSensor)和离散传感器(DiscreteSensor),提供完整的传感器配置和监控功能
所属SIG组sensor
所属组件sensor
责任人传感器管理组
最后更新2025-01-27
状态🟢 正常运行

📊 属性定义详表

Entity 类 - 必选属性

属性名类型默认值取值范围动态关联描述使用场景举例来源分类
IdU8-U8-传感器对应的实体标识
具体参照IPMI标准协议规范Table 43-, Entity ID Codes(P550)
配置传感器实体7CSR软件
InstanceU8-U8-传感器对应的实体实例标识,通常以0x60开始配置,理论上应保证相同Id下Instance不同
具体参照 Section 39.1 System- and Device-relatice Entity Instance Values(P492)
配置传感器实体96CSR软件
NameString-String-实体名称配置传感器实体"MainBoard"CSR软件
PresenceU81默认1或者关联部件在位-实体在位状态,部件不存在动态拔插则配死为1,否则应关联对应的在位信号配置传感器实体1CSR软件
PowerStateMixed1默认1或者关联部件在位Scanner_PowerGood实体上下电状态,若与上下电状态无关则配死为1,否则应关联上下电信号配置传感器实体"<=/Scanner_PowerGood.Value"CSR软件

Entity 类 - 可选属性

属性名类型默认值取值范围动态关联描述使用场景举例来源分类
SlotU8255U8-实体所在的槽位,默认0xFF配置传感器实体255CSR软件

ThresholdSensor 类 - 必选属性

属性名类型默认值取值范围动态关联描述使用场景举例来源分类
OwnerIdU832--传感器所有者ID配置传感器对象32CSR软件
OwnerLunU80--传感器所有者LUN配置传感器对象0CSR软件
EntityIdMixed-关联Entity的IdEntity_MainBoard传感器需要关联实体,关联对应实体的Id属性配置传感器对象"<=/Entity_MainBoard.Id"CSR软件
EntityInstanceMixed-关联Entity的InstanceEntity_MainBoard传感器需要关联实体,关联对应实体的Instance属性配置传感器对象"<=/Entity_MainBoard.Instance"CSR软件
InitializationU8127U8-传感器初始化选项,门限传感器 - 0x7F配置传感器对象127CSR软件
CapabilitiesU8232U8-传感器能力,具体含义见IPMI标准协议规范43.1章节
①若传感器使能状态不受实体在位及上下电影响,则配置为104
②若传感器使能状态受实体在位及上下电影响,则配置为232
配置传感器对象232CSR软件
SensorTypeU8-U8-传感器类型
具体参照 Table 42-, Sensor Type Codes(P505)
配置传感器对象1CSR硬件
ReadingTypeU81U8-传感器读值类型,ThresholdSensor则配置为0x01
具体参照 Table 42-, Event/Reading Type Code Ranges(P503)
配置传感器对象1CSR硬件
SensorNameString-String-传感器名称配置传感器对象"BCU${Slot} VCC_12V0_1"CSR硬件
AssertMaskU16-U16-传感器事件产生掩码,决定是否能产生事件;配置门限场景使用,具体含义见IPMI标准协议规范43.1章节配置传感器对象516CSR硬件
DeassertMaskU16-U16-传感器事件恢复掩码,决定是否能恢复事件;配置门限场景使用,具体含义见IPMI标准协议规范43.1章节配置传感器对象516CSR硬件
ReadingMaskU16-U16-传感器读值掩码,决定是否能对外显示门限;配置门限场景使用,具体含义见IPMI标准协议规范43.1章节配置传感器对象4626CSR硬件
UnitU8-U8-传感器单位配置,具体含义见IPMI标准协议规范43.1章节
①传感器读值为有符号数,如温度:配置为128
②传感器读值为无符号数,如功率:配置为0
配置传感器对象128CSR软件
BaseUnitU8-U8-传感器基本单位,如温度传感器配置为1(表示Degrees C)
具体参照IPMI标准协议规范Table 43-, Sensor Unit Type Codes(P554)
配置传感器对象4CSR硬件
MU81U8-按需配置,无原始值缩放转换需求,则默认配置为1配置传感器对象6CSR硬件
MaximumReadingU8-U8-实际最大值,与数据格式有关
①有符号数,配置为127
②无符号数,配置为255
配置传感器对象255CSR硬件
MinimumReadingU8-U8-实际最小值,与数据格式有关
①有符号数,配置为128
②无符号数,配置为0
配置传感器对象0CSR软件
ReadingMixed-关联数据源Scanner_12v1、Scanner_PowerGood传感器原始读值配置传感器对象`"<=/Scanner_12v1.Value;<=/Scanner_PowerGood.Value> expr(($2 == 0) ? 0 : (($1 / 12) > 255 ? 204 : ($1 / 12)))"`CSR
ReadingStatusMixed-关联数据源Scanner_12v1、Scanner_PowerGood传感器读值状态:0:normal配置传感器对象`"<=/Scanner_12v1.Status;<=/Scanner_12v1.Value;<=/Scanner_PowerGood.Value> expr((($1 == 0) && (($2 / 12) > 255) && ($3 == 1)) ? 2 : $1)"`CSR

ThresholdSensor 类 - 可选属性

属性名类型默认值取值范围动态关联描述使用场景举例来源分类
RBExpU8224U8-按需配置,无原始值缩放转换需求,则可配置配置传感器对象224CSR硬件
NominalReadingU8204U8-名义读值,无实际含义,在数据格式范围内即可配置传感器对象204CSR硬件
UpperCriticalU8220U8-按需配置,传感器严重事件上限配置传感器对象220CSR硬件
LowerCriticalU8180U8-按需配置,传感器严重事件下限配置传感器对象180CSR硬件
UpperNoncriticalU80U8-按需配置,传感器一般事件上限配置传感器对象0CSR硬件
LowerNonCriticalU80U8-按需配置,传感器一般事件下限配置传感器对象0CSR硬件
UpperNonrecoverableU80U8-按需配置,传感器紧急事件上限配置传感器对象0CSR硬件
LowerNonrecoverableU80U8-按需配置,传感器紧急事件下限配置传感器对象0CSR硬件
PositiveHysteresisU84U8-按需配置,传感器上升事件恢复迟滞量配置传感器对象4CSR硬件
NegativeHysteresisU84U8-按需配置,传感器下降事件恢复迟滞量配置传感器对象4CSR硬件
SensorNumberU8255U8-无传感器编号定制需求,则不配置或配死为255,由sensor模块分配配置传感器对象255CSR软件

DiscreteSensor 类 - 必选属性

属性名类型默认值取值范围动态关联描述使用场景举例来源分类
EntityIdMixed-关联Entity的IdEntity_MainBoard传感器需要关联实体,关联对应实体的Id属性配置传感器对象"<=/Entity_MainBoard.Id"CSR软件
EntityInstanceMixed-关联Entity的InstanceEntity_MainBoard传感器需要关联实体,关联对应实体的Instance属性配置传感器对象"<=/Entity_MainBoard.Instance"CSR软件
InitializationU899U8-传感器初始化选项,离散传感器 - 0x63配置传感器对象99CSR软件
CapabilitiesU864U8-传感器能力,具体含义见IPMI标准协议规范43.1章节
①若传感器使能状态不受实体在位及上下电影响,则配置为64
②若传感器使能状态受实体在位及上下电影响,则配置为192
配置传感器对象64CSR软件
SensorTypeU8-U8-传感器类型
具体参照 Table 42-, Sensor Type Codes(P505)
配置传感器对象35CSR硬件
ReadingTypeU8-U8-传感器读值类型
具体参照 Table 42-, Event/Reading Type Code Ranges(P503)
配置传感器对象111CSR硬件
SensorNameString-String-传感器名称配置传感器对象"Watchdog2"CSR硬件
AssertMaskU16-U16-传感器事件产生掩码,决定是否能产生事件;配置门限场景使用,具体含义见IPMI标准协议规范43.1章节配置传感器对象271CSR硬件
DeassertMaskU16-U16-传感器事件恢复掩码,决定是否能恢复事件;配置门限场景使用,具体含义见IPMI标准协议规范43.1章节配置传感器对象271CSR硬件
DiscreteMaskU16-U16-传感器读值掩码,决定是否能对外显示门限;配置门限场景使用,具体含义见IPMI标准协议规范43.1章节配置传感器对象271CSR硬件
UnitU8192U8-传感器单位配置,离散传感器-0xc0配置传感器对象192CSR软件
BaseUnitU80U8-离散传感器无单位,配置为0配置传感器对象0CSR硬件
DiscreteTypeU80U8-传感器离散类型,具体是什么类型参照 Table 42-, Sensor Type Codes(P505)
普通离散:0
数字离散:1(事件互斥)
配置传感器对象0CSR软件

DiscreteSensor 类 - 可选属性

属性名类型默认值取值范围动态关联描述使用场景举例来源分类
SensorNumberU8255U8-无传感器编号定制需求,则不配置或配死为255,由sensor模块分配配置传感器对象255CSR软件

🔗 动态关联机制

语法规范

使用 <=/xxx 和表达式语法实现动态关联:

yaml
# Entity关联
EntityId: "<=/Entity_MainBoard.Id"
EntityInstance: "<=/Entity_MainBoard.Instance"

# 电源状态关联
PowerState: "<=/Scanner_PowerGood.Value"

# 传感器读值关联和表达式
Reading: "<=/Scanner_12v1.Value;<=/Scanner_PowerGood.Value |> expr(($2 == 0) ? 0 : (($1 / 12) > 255 ? 204 : ($1 / 12)))"

# 传感器状态关联
ReadingStatus: "<=/Scanner_12v1.Status;<=/Scanner_12v1.Value;<=/Scanner_PowerGood.Value |> expr((($1 == 0) && (($2 / 12) > 255) && ($3 == 1)) ? 2 : $1)"

关联说明

  • Entity关联: 传感器必须关联对应的实体对象
  • PowerState: 可关联电源状态信号,支持动态上下电控制
  • Reading: 支持复杂表达式计算,可关联多个Scanner值
  • ReadingStatus: 传感器状态管理,支持条件表达式

📂 分类标准

硬件属性

  • 定义:与硬件特性和物理参数直接相关的属性
  • 特点:通常与IPMI标准协议规范对应,反映硬件特性
  • 示例SensorType, ReadingType, SensorName, AssertMask, DeassertMask, ReadingMask, BaseUnit, M, RBExp, NominalReading, UpperCritical, LowerCritical, UpperNoncritical, LowerNonCritical, UpperNonrecoverable, LowerNonrecoverable, PositiveHysteresis, NegativeHysteresis, MaximumReading, Reading, ReadingStatus

软件属性

  • 定义:用于逻辑控制和软件管理的参数
  • 特点:由CSR配置管理,用于传感器逻辑控制
  • 示例Id, Instance, Slot, Name, Presence, PowerState, OwnerId, OwnerLun, EntityId, EntityInstance, Initialization, Capabilities, Unit, MinimumReading, SensorNumber, DiscreteType

📝 配置示例

温度传感器配置

json
{
  "Entity": {
    "Id": 7,
    "Instance": 96,
    "Name": "MainBoard",
    "Presence": 1,
    "PowerState": "<=/Scanner_PowerGood.Value",
    "Slot": 255
  },
  "ThresholdSensor": {
    "OwnerId": 32,
    "OwnerLun": 0,
    "EntityId": "<=/Entity_MainBoard.Id",
    "EntityInstance": "<=/Entity_MainBoard.Instance",
    "Initialization": 127,
    "Capabilities": 232,
    "SensorType": 1,
    "ReadingType": 1,
    "SensorName": "CPU Temperature",
    "AssertMask": 516,
    "DeassertMask": 516,
    "ReadingMask": 4626,
    "Unit": 128,
    "BaseUnit": 1,
    "M": 1,
    "MaximumReading": 127,
    "MinimumReading": 128,
    "UpperCritical": 85,
    "LowerCritical": 0,
    "PositiveHysteresis": 2,
    "NegativeHysteresis": 2,
    "Reading": "<=/Scanner_CpuTemp.Value",
    "ReadingStatus": "<=/Scanner_CpuTemp.Status",
    "SensorNumber": 255
  }
}

电压传感器配置

json
{
  "Entity": {
    "Id": 7,
    "Instance": 97,
    "Name": "PowerBoard",
    "Presence": 1,
    "PowerState": "<=/Scanner_PowerGood.Value",
    "Slot": 255
  },
  "ThresholdSensor": {
    "OwnerId": 32,
    "OwnerLun": 0,
    "EntityId": "<=/Entity_PowerBoard.Id",
    "EntityInstance": "<=/Entity_PowerBoard.Instance",
    "Initialization": 127,
    "Capabilities": 232,
    "SensorType": 2,
    "ReadingType": 1,
    "SensorName": "BCU1 VCC_12V0_1",
    "AssertMask": 516,
    "DeassertMask": 516,
    "ReadingMask": 4626,
    "Unit": 0,
    "BaseUnit": 4,
    "M": 6,
    "RBExp": 224,
    "NominalReading": 204,
    "MaximumReading": 255,
    "MinimumReading": 0,
    "UpperCritical": 220,
    "LowerCritical": 180,
    "PositiveHysteresis": 4,
    "NegativeHysteresis": 4,
    "Reading": "<=/Scanner_12v1.Value;<=/Scanner_PowerGood.Value |> expr(($2 == 0) ? 0 : (($1 / 12) > 255 ? 204 : ($1 / 12)))",
    "ReadingStatus": "<=/Scanner_12v1.Status;<=/Scanner_12v1.Value;<=/Scanner_PowerGood.Value |> expr((($1 == 0) && (($2 / 12) > 255) && ($3 == 1)) ? 2 : $1)",
    "SensorNumber": 255
  }
}

离散传感器配置

json
{
  "Entity": {
    "Id": 7,
    "Instance": 98,
    "Name": "SystemBoard",
    "Presence": 1,
    "PowerState": 1,
    "Slot": 255
  },
  "DiscreteSensor": {
    "EntityId": "<=/Entity_SystemBoard.Id",
    "EntityInstance": "<=/Entity_SystemBoard.Instance",
    "Initialization": 99,
    "Capabilities": 64,
    "SensorType": 35,
    "ReadingType": 111,
    "SensorName": "Watchdog2",
    "AssertMask": 271,
    "DeassertMask": 271,
    "DiscreteMask": 271,
    "Unit": 192,
    "BaseUnit": 0,
    "DiscreteType": 0,
    "SensorNumber": 255
  }
}

风扇传感器配置

json
{
  "Entity": {
    "Id": 29,
    "Instance": 96,
    "Name": "FanBoard",
    "Presence": 1,
    "PowerState": "<=/Scanner_PowerGood.Value",
    "Slot": 255
  },
  "ThresholdSensor": {
    "OwnerId": 32,
    "OwnerLun": 0,
    "EntityId": "<=/Entity_FanBoard.Id",
    "EntityInstance": "<=/Entity_FanBoard.Instance",
    "Initialization": 127,
    "Capabilities": 232,
    "SensorType": 4,
    "ReadingType": 1,
    "SensorName": "Fan1 Speed",
    "AssertMask": 516,
    "DeassertMask": 516,
    "ReadingMask": 4626,
    "Unit": 0,
    "BaseUnit": 18,
    "M": 1,
    "MaximumReading": 255,
    "MinimumReading": 0,
    "LowerCritical": 20,
    "PositiveHysteresis": 2,
    "NegativeHysteresis": 2,
    "Reading": "<=/Scanner_FanSpeed.Value",
    "ReadingStatus": "<=/Scanner_FanSpeed.Status",
    "SensorNumber": 255
  }
}

🔧 使用指南

配置步骤

  1. 创建实体对象:首先配置Entity,定义传感器所属的实体
  2. 选择传感器类型:根据需要选择ThresholdSensor或DiscreteSensor
  3. 关联实体:通过EntityId和EntityInstance关联对应的Entity
  4. 配置传感器属性:设置SensorType、ReadingType、SensorName等基本属性
  5. 设置掩码:配置AssertMask、DeassertMask、ReadingMask等掩码
  6. 配置单位和范围:设置Unit、BaseUnit、MaximumReading、MinimumReading等
  7. 关联数据源:通过Reading和ReadingStatus关联Scanner等数据源
  8. 设置门限:配置UpperCritical、LowerCritical等门限值(ThresholdSensor)
  9. 配置迟滞量:设置PositiveHysteresis、NegativeHysteresis避免抖动

注意事项

  • IPMI标准遵循:所有配置必须符合IPMI标准协议规范
  • 实体关联:传感器必须关联对应的Entity对象
  • 数据格式:注意有符号数和无符号数的MaximumReading和MinimumReading配置
  • Capabilities配置:根据实体的在位和上下电状态选择合适的Capabilities值
  • 传感器编号:SensorNumber建议配置为255,由sensor模块自动分配
  • 表达式语法:使用复杂表达式时需要确保语法正确
  • 门限设置:ThresholdSensor的门限值要在MinimumReading和MaximumReading范围内

性能建议

  • 合理设置迟滞量:避免传感器事件频繁触发和恢复
  • 优化Reading表达式:复杂表达式可能影响性能
  • 实体状态管理:合理配置Presence和PowerState减少无效扫描
  • 传感器分组:相同类型的传感器可以考虑优化配置策略

故障排查

  • 传感器不显示:检查Entity关联和Capabilities配置
  • 读值异常:检查Reading表达式和数据源关联
  • 事件不触发:检查AssertMask和DeassertMask配置
  • 门限显示错误:检查ReadingMask和门限值配置
  • 单位显示错误:检查Unit和BaseUnit配置
  • 传感器状态异常:检查ReadingStatus表达式和实体状态