It's working!!One more question: with this example it allow querys from one single IP. Is there a setting that allows querys from any ip inthe LAN?This is already OK to me! but I would like to know!Thank you again!!
(23.03.2022, 10:09)admin Wrote: 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.
Code:123456789101112131415local 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:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273local 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