1
我想通過snmp讀取RaspberryPi的GPIO引腳。我在python中編寫了一個腳本來讀取這個pin。出於測試目的,我提供的價值17和99snmp-get value from pass is missing
/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上運行腳本時,它工作:
[email protected]:~# /usr/local/bin/snmp-gpio17.sh -g
.1.3.6.1.4.1.18565.1.12.101.1.17
gauge
17
但是當我嘗試讀取OID(本地或通過網絡),我得到:
[email protected] ~ $ 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
我還設置了CPU溫度的測量通過SNMP與另一通線和它工作正常。我使用幾乎相同的腳本:
#!/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通信似乎是OK(我比較了使用Wireshark的答案),但在RasPi SNMPD會從在bash腳本錯誤信息。
任何人有想法?
問候,卡爾
請注意,在生產腳本中使用'#/ bin/bash -e',以便在出現錯誤時立即退出,而不是執行錯誤操作。 –
謝謝伊萬。現在我想,這肯定是一個用戶問題。當我使用snmp(本地或遠程)shell腳本運行時,也是python腳本,但是腳本無法讀取gpio-pins :-(我把用戶「snmp」放在組「gpio」中,但它沒有幫助。 – karls0
[解決]現在,即使我從組gpio中刪除用戶snmp,我的測試問題是,我沒有在兩次測試之間等待,我發現,RasPi上的snmpd緩存了get 30秒。只有等待很長時間,纔會有新的結果!謝謝大家 – karls0