离散传感器新增分享

## 离散传感器新增

离散传感器新增需要修改两个仓,一个是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 事件是否屏蔽标识