传递中的snmp-get值缺失

时间:2016-02-29 17:09:50

标签: python raspberry-pi snmp

我想通过snmp读取RaspberryPi的GPIO引脚。我在python中编写了一个脚本来读取引脚。出于测试目的,我提供了值17和99.

/usr/local/bin/snmp-gpio17.py

#!/usr/bin/python3 -u
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
if not GPIO.input(17):
   var=17
else:
   var=99
print ( var )

此脚本由/usr/local/bin/snmp-gpio17.sh调用:

#!/bin/bash
if [ "$1" = "-g" ]
then
echo .1.3.6.1.4.1.18565.1.12.101.1.17
echo gauge
python /usr/local/bin/snmp-gpio17.py
fi
exit 0

/etc/snmp/snmpd.conf中,我添加了一行

pass .1.3.6.1.4.1.18565.1.12.101.1.17 /bin/sh  /usr/local/bin/snmp-gpio17.sh

当我在RasPi上运行脚本时,它可以工作:

root@raspberrypi:~# /usr/local/bin/snmp-gpio17.sh -g
.1.3.6.1.4.1.18565.1.12.101.1.17
gauge
17

但是当我尝试读取OID(本地或通过网络)时,我得到:

karls@mintbox ~ $ snmpget -v1 -c public 192.168.129.4 .1.3.6.1.4.1.18565.1.12.101.1.17
iso.3.6.1.4.1.18565.1.12.101.1.17 = Gauge32: 0

我还设置了通过snmp与另一个传递线测量cpu温度,它工作正常。我使用几乎相同的脚本:

#!/bin/bash
if [ "$1" = "-g" ]
then
echo .1.3.6.1.4.1.18565.1.12.101.1.101
echo gauge
cat /sys/class/thermal/thermal_zone0/temp
fi
exit 0

所以snmp-communication似乎没问题(我用wireshark比较了答案),但是对RasPi的snmpd从bash-script获取错误的信息。

有人有想法吗?

问候,卡尔

1 个答案:

答案 0 :(得分:1)

[已解决]现在可以使用,即使我从组gpio中删除了用户snmp。我在测试中的问题是,我没有在两次测试之间等待。我发现,在RasPi上snmpd缓存获得30秒的结果。只有等了那么久,你才能得到新的结果!感谢所有