我正在为传感器产品开发SNMP(2c)代理。我刚刚学习了SNMP和MIB格式,并努力代表一个可能未知的特定值。
例如,我已将温度OBJECT-TYPE
定义为Integer32,但有时该值不可用或未知。如果我以空值响应,则SNMP管理器超时*。当温度值未知或不可用时,我宁愿使用空值,而不是同意某个特定值来表示同样的事情。
这引出了以下问题:
<子> * 我使用MG-SOFT's MIB Browser来获取值作为测试方法。如果该值为null,则超时(即使代理响应)。如果该值是整数,则按预期工作。我正在使用nSoftware IP*Works! SNMP library开发代理。 子>
答案 0 :(得分:1)
发表评论:
你不应该这样做。 OID值应始终为单数,不应动态更改,如果有人将使用mib文件,则对于正在为此传感器实现通信协议的人员来说,这将是错误的并且具有误导性。正确的方法是让2个OID与值一起,另一个与传感器的状态相同。
答案 1 :(得分:-1)
在实验中,我在动态更改SNMP代理对象类型方面取得了一些成功:
#voteUpForm, #voteDownForm
{
display: inline-block;
}
#voteUpButton, #voteDownButton
{
height: 32px;
width: auto;
margin-right: 7px;
display: block;
}
#bottomBarControls
{
display: flex;
align-items: center;
}
#voteCounter
{
display: inline-block;
}
#views
{
display: inline-block;
}
使用MIB浏览器执行GetRequest时,它似乎可以处理这两种情况。即使MIB没有指定特定的OID可以为空,只是int? temperature = ReadTemperature();
snmpAgent.Objects[i].Value = temperature.ToString();
snmpAgent.Objects[i].ObjectType = temperature.HasValue ? SNMPObjectTypes.otInteger : SNMPObjectTypes.otNull;
,它似乎也有效。各种SNMP管理器的行为可能会有所不同。
(此示例特定于IPWorks SNMP代理。)