Мне нужно управлять простым устройством через SNMP с использованием Python 3.7, чтобы включить его (1) и выключить (0). В руководстве по устройству, в информации MIB, есть список OID для каждой команды (например: GET выходной статус: 1.3.6........).
Мне удается заставить запрос GET работать так, как мне нравится (источник: http://snmplabs.com/pysnmp/examples/hlapi/asyncore/sync/manager/cmdgen/snmp-versions.html):
from pysnmp.hlapi import *
g = getCmd(SnmpEngine()
, CommunityData('public', mpModel=1)
, hlapi.UdpTransportTarget(('DEVICE IP', 161))
, ContextData()
, ObjectType(ObjectIdentity('GET OID given by the device manual')))
errorIndication, errorStatus, errorIndex, varBinds = next(g)
for varBind in varBinds:
print(' = '.join([x.prettyPrint() for x in varBind]))
Однако, когда я пытаюсь использовать SET таким же образом: (источник: http://snmplabs.com/pysnmp/examples/hlapi/asyncore/sync/manager/cmdgen/modifying-variables.html)
from pysnmp.hlapi import *
g = setCmd(SnmpEngine()
, CommunityData('public', mpModel=1)
, hlapi.UdpTransportTarget(('DEVICE IP', 161))
, ContextData()
, ObjectType(ObjectIdentity('SET OID given by the device manual, which is the same as the GET'), '1') #1 = new value
)
errorIndication, errorStatus, errorIndex, varBinds = next(g)
print(errorIndication, varBinds)
Я получаю следующую ошибку:
MibNotFoundError: SET OID compilation error(s): missingcaused by <class 'pysnmp.smi.error.MibNotFoundError'>: MIB file "SET OID.py[co]" not found in search path (DirMibSource('/home/username/anaconda3/lib/python3.7/site-packages/pysnmp/smi/mibs'), DirMibSource('/home/username/anaconda3/lib/python3.7/site-packages/pysnmp/smi/mibs/instances'), DirMibSource('pysnmp_mibs'), DirMibSource('/home/username/.pysnmp/mibs'))
Я не понимаю, почему в одном случае работает без проблем, а в другом нет. В руководстве по устройству инструкция такая же, как и GET, но в конце есть STRING 0 или 1, видимо, я что-то упустил, но не нашел, как это написать.
Я просто хочу дать эту очень простую инструкцию, если у кого-то есть простой ответ или альтернатива.
Большое Вам спасибо
P.S. : я также попробовал это руководство (https://www.ictshore.com/sdn/python-snmp-tutorial/), которые создают свои собственные функции, и снова работает GET, но не SET. Я понял, что мой OID не Object-TYPE.