2016-02-29 77 views
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腳本錯誤信息。

任何人有想法?

問候,卡爾

+0

請注意,在生產腳本中使用'#/ bin/bash -e',以便在出現錯誤時立即退出,而不是執行錯誤操作。 –

+0

謝謝伊萬。現在我想,這肯定是一個用戶問題。當我使用snmp(本地或遠程)shell腳本運行時,也是python腳本,但是腳本無法讀取gpio-pins :-(我把用戶「snmp」放在組「gpio」中,但它沒有幫助。 – karls0

+0

[解決]現在,即使我從組gpio中刪除用戶snmp,我的測試問題是,我沒有在兩次測試之間等待,我發現,RasPi上的snmpd緩存了get 30秒。只有等待很長時間,纔會有新的結果!謝謝大家 – karls0

回答

1

[解決]它現在,即使我刪除組GPIO用戶SNMP。我的測試問題是,我沒有在兩次測試之間等待。我發現,RasPi上的snmpd將獲得的結果緩存了30秒。只有等待那麼久,你纔會得到新的結果!感謝所有