## 离散传感器新增
离散传感器新增需要修改两个仓,一个是sr所在的仓,一个是sensor仓
介绍在sr里新增离散传感器,以下为例:
"DiscreteSensor_xxx1": {
"OwnerId": 32,
"OwnerLun": 0,
"EntityId": "<=/Entity_MainBoard.Id",
"EntityInstance": "<=/Entity_MainBoard.Instance",
"Initialization": 99,
"Capabilities": 64,
"SensorType": 22,
"ReadingType": 9,
"SensorName": "xxx",
"AssertMask": 2,
"DeassertMask": 0,
"DiscreteMask": 2,
"Unit": 192,
"BaseUnit": 0,
"ModifierUnit": 0,
"DiscreteType": 1,
"RecordSharing": 1,
"Reading": 0
},
"DiscreteEvent_xxx1": {
"Property": 0,
"ListenType": 1,
"EventData1": 1,
"EventData2": 255,
"EventData3": 255,
"EventDir": "<=/PowerStrategy_1.RedundancyFailure |> expr($1 ? 1 : 0)",
"Conversion": 0,
"SensorObject": "#/DiscreteSensor_PSRedundancy"
}
// DiscreteSensor_xxx1
// OwnerId和OwnerLun 为固定值,表示传感器的归属Id和归属Lun,分别为0x20、0x0
// EntityId和EntityInstance,关联上对应的Entity对象
// Initialization 为固定值,表示传感器初始化选项,离散传感器的值为0x63,门限传感器的值为0x7F
// SensorType 为ipmi规范文档下里的 Table 42-, Sensor Type Codes 传感器类型,例如01h表示Temperature、04h表示Fan等
// ReadingType 为ipmi规范文档下里的 Table 42-, Event/Reading Type Code Ranges 表示读取数值的类型,例如03h表示传感器读取的为状态是否触发,07h表示读取的是设备是否存在或者移除
// SensorName 为web下显示的传感器名称
// AssertMask 为触发事件掩码,配置时需要与关联传感器的离散事件匹配,当配置了离散事件时需要将对应的位设置为1,例如上面代码中DiscreteEvent_BIOSBootUp_0中的EventData1为1,则AssertMask的第2位设置为1(从0开始,EventData1为0,才是表示第1位)
// DeassertMask 为恢复事件掩码,配置时需要与关联传感器的离散事件匹配,当配置了离散事件时需要将对应的位设置为1,与AssertMask一样,当设置后了对应的位,离散事件没有触发时会有恢复事件产生
// DiscreteMask 为离散传感器状态是否能通过传感器返回,与AssetMask、DeassertMask一样
// 注意一般AssertMask、DeassertMask、DiscreteMask可能会与其他属性分开写,例如将AssertMask、DeassertMask、DiscreteMask写在sr里,其他属性写在soft.sr里
// Unit 为传感器单位,取值为0xC0
// BaseUnit 为传感器基准单位,取值为0
// ModifierUnit 为传感器单位描述符,取值为0
// RecordSharing 为传感器记录共享、离散参考方向,取值为1
// Reading 在离散传感器中无实际意义,一般不用配置
// 其中重要的配置有Capabilities、SensorType、ReadingType、SensorName、AssertMask、DeassertMask、DiscreteMask;其它的大部分为固定值;
// SensorType、ReadingType需要查看ipmi文档的Table 42-, Sensor Type Codes 和 Table 42-, Event/Reading Type Code Ranges;也可参照其它类似的离散传感器来配置;
// AssertMask、DeassertMask、DiscreteMask 则需要根据配置的DiscreteEvent的EventData1的对应位来配置
// DiscreteEvent_xxx1
// 分为组合监听和独立监听,当ListenType为1时,代表是独立监听,当ListenType为0时代表是组合监听;独立监听是EventDir、EventData1、EventData2、EventData3都从各对应的字段获取;组合监听是EventDir、EventData1、EventData2、EventData3从Property里获取,Property四个字节,每个字节从高到低为EventDir、EventData1、EventData2、EventData3
// EventData1、EventData2、EventData3、EventDir都是独立监听使用,参考sensor组件下的proto/datas.yml进行对应配置;当配置为组合监听时可配置为无效值255
// EventDir 表示是否触发,为0恢复,非0触发,一般用表达式
// Conversion 翻转标识,一般设置为0即可
## 离散事件新增
需要检查修改sensor下的proto/datas.yml下,对应的SensorType和ReadingType的事件是否存在或者被屏蔽;如果产生了修改需要进行自动代码生成
t_ipmi_sel_filters:
FilterMask1: 0x02
FilterMask2: 0xffff
FilterMask3: 0xffff
ReadingType: 0x09
SensorType: 0x16
FilterMask1: 0x02
FilterMask2: 0xffff
FilterMask3: 0xffff
ReadingType: 0x03
SensorType: 0x16
t_ipmi_sel_descs:
SensorType: 22
ReadingType: 9
SelData1: 1
SelData2: 3
SelData3: 255
SelDesc: “xxx”
AlarmLevel: 0
ShieldFlag: 0
SensorType: 22
ReadingType: 9
SelData1: 1
SelData2: 4
SelData3: 255
SelDesc: “xxx”
AlarmLevel: 0
ShieldFlag: 0
SensorType: 22
ReadingType: 9
SelData1: 1
SelData2: 5
SelData3: 255
SelDesc: “xxx”
AlarmLevel: 0
ShieldFlag: 0
# datas.yml涉及两个大表分别是t_ipmi_sel_filters和t_ipmi_sel_descs
# t_ipmi_sel_descs的SensorType、ReadingType都是与DiscreteSensor_xxx1里的SensorType、ReadingType相对应,
# t_ipmi_sel_descs的SelData1、SelData2、SelData3与DiscreteEvent_BIOSBootUp_0的EventData1、EventData2、EventData3相对应,只有匹配上触发事件时才会打印t_ipmi_sel_descs里的SelDesc描述里的信息,
# 当SelData3或SelData2为255时,无论EventData2、EventData3为多少也都能匹配上
# t_ipmi_sel_filters的FilterMask1、FilterMask2、FilterMask3则分别是SelData1、SelData2、SelData3的掩码,例如当SelData1为4时,则代表FilterMask1第五位要为1时,才会触发事件
# AlarmLevel 告警等级,0是最低等级
# ShieldFlag 事件是否屏蔽标识