我试图通过snmp查询modbus设备,使用snmpd来传递python脚本来检索数据。
#! /bin/bash
if [ "$1" = "-g" ]
then
echo .1.3.6.1.4.1.52612.10.3.1
echo string
python /usr/local/bin/readvolt.py
fi
exit 0这个readvolt.py看起来是这样的:
#!/usr/bin/python
import minimalmodbus
eqp = minimalmodbus.Instrument('/dev/ttyUSB0',1) # port name, slave address (in decimal)
# skip some other lines for serial port initialization
volt = eqp.read_float(0,4,2) # getting data from serial modbus
print volt这句话来自我的snmpd.conf:
pass .1.3.6.1.4.1.52612.10.3.1 /bin/sh /usr/local/bin/volt.sh我的问题是:我得到了python的回溯,无法找到minimalmodbus模块,但是当我尝试从主机直接运行readvolt.py时,它正在按预期工作(它可以打印结果(volt) )。
pi@raspberrypi:/usr/local/bin $ readvolt.py
220.25我还尝试使用简单python脚本(test.py),以确保snmpd传递是否可以在snmpget从snmp管理器获得响应时运行python脚本。
#!/usr/bin/python
import sys
print "test"它运行正常:
suryo@r50e:~$ snmpwalk -v2c -c public 192.168.1.5 .1.3.6.1.4.1.52612.10.3.1
iso.3.6.1.4.1.52612.10.3.1 = STRING: "test"
suryo@r50e:~$ 这里有什么问题?似乎python在snmpd pass运行时无法导入外部模块。我在想,如果这是一个访问控制问题,Debian没有权利访问串口。
发布于 2018-10-10 15:52:45
通过查找snmpd守护进程的用户名解决了问题。我将whoami放入脚本中,得到“Debian-snmp”,然后直接运行,通过运行检查组成员:
pi@rraspberrypi:~$ groups Debian-snmp
Debian-snmp : Debian-snmp将Debian-snmp置于拨号成员资格中,以授予对串行端口的完全访问:
pi@raspberrypi:~ $ sudo usermod -a -G dialout Debian-snmp重新启动snmpd以新成员身份登录,voilla..It可以从snmp命令/snmpget读取从modbus设备。
https://stackoverflow.com/questions/52720128
复制相似问题