23.03.2022, 10:09
Sending traps is not implemented at the moment. SNMP agent (experimental) can be executed via a script. It allows mapping objects to OIDs.
1. Install the latest package via system config:
https://dl.openrb.com/pkg/libnetsnmp_5.8-1_imx6.ipk
https://dl.openrb.com/lm-21-imx6/pkg/lua...5_imx6.ipk
2. Create a resident script with sleep time set to 5. Edit conf variable as needed. In this example remote host is 192.168.1.230, base OID is .1.3.6.1.4.1.53864.1.1
Note that disabling the script does not stop the snmp daemon.
3. Create user library named "snmphandler". Edit the oids table and supply required oids and group address pairs. Base OID must match the configured OID in the snmpd conf. Make sure that all mapped group addresses exist.
1. Install the latest package via system config:
https://dl.openrb.com/pkg/libnetsnmp_5.8-1_imx6.ipk
https://dl.openrb.com/lm-21-imx6/pkg/lua...5_imx6.ipk
2. Create a resident script with sleep time set to 5. Edit conf variable as needed. In this example remote host is 192.168.1.230, base OID is .1.3.6.1.4.1.53864.1.1
Note that disabling the script does not stop the snmp daemon.
Code:
local conf = [[
rocommunity public 192.168.1.230
rwcommunity private 192.168.1.230
pass .1.3.6.1.4.1.53864.1.1 /usr/bin/lua /tmp/snmp.lua
]]
local script = [[
require('user.snmphandler')
]]
io.writefile('/tmp/snmpd.conf', conf)
io.writefile('/tmp/snmp.lua', script)
os.execute('killall snmpd; snmpd -c /tmp/snmpd.conf -f')
3. Create user library named "snmphandler". Edit the oids table and supply required oids and group address pairs. Base OID must match the configured OID in the snmpd conf. Make sure that all mapped group addresses exist.
Code:
local oids = {
{ oid = '.1.3.6.1.4.1.53864.1.1.1.0', addr = '1/1/1' },
{ oid = '.1.3.6.1.4.1.53864.1.1.2.1.2.1', addr = '1/1/2' },
{ oid = '.1.3.6.1.4.1.53864.1.1.2.1.3.1', addr = '1/1/4' },
{ oid = '.1.3.6.1.4.1.53864.1.1.3.0', addr = '1/1/5' },
{ oid = '.1.3.6.1.4.1.53864.1.1.4.0', addr = '1/1/6' },
{ oid = '.1.3.6.1.4.1.53864.1.1.5.0', addr = '1/1/7' },
{ oid = '.1.3.6.1.4.1.53864.1.1.6.0', addr = '1/1/8' },
}
require('genohm-scada')
db = require('dbenv').new()
local req, oid = assert(arg[ 1 ]), assert(arg[ 2 ])
local function get(item)
if not item then
return
end
local obj = grp.find(item.addr)
if not obj then
return
end
local value = obj.value
local objtype = 'integer'
if type(value) == 'boolean' then
value = value and 1 or 0
elseif type(value) == 'number' then
value = math.round(value)
elseif type(value) ~= 'string' then
value = require('json').encode(value)
end
print(item.oid)
print(type(value) == 'number' and 'integer' or 'string')
print(value)
end
-- get
if req == '-g' then
for i, item in ipairs(oids) do
if item.oid == oid then
get(item)
break
end
end
-- next
elseif req == '-n' then
for i, item in ipairs(oids) do
if item.oid == oid then
get(oids[ i + 1 ])
break
elseif item.oid:find(oid, 1, true) == 1 then
get(item)
break
end
end
-- set
elseif req == '-s' then
local objtype, value = assert(arg[ 3 ]), assert(arg[ 4 ])
if objtype ~= 'string' then
value = tonumber(value)
end
for i, item in ipairs(oids) do
if item.oid == oid then
grp.write(item.addr, value)
end
end
end