Can confirm I got it working. There is still some work to do. If anyone stumbles across this post and has Trendnet IPTV cameras, this should get you started:
/local/lib/check_mk/base/plugins/agent_based/trendnet_camera.py
#!/usr/bin/env python3
from cmk.base.plugins.agent_based.agent_based_api.v1 import exists, register, SNMPTree, Service, Result, State
def parse_trendnet_camera(string_table):
mib = {
1: ('deviceType'),
2: ('hardwVersion'),
3: ('softwVersion'),
4: ('macAddr'),
5: ('deviceID'),
6: ('manufacturer'),
7: ('cpuPercent'),
8: ('diskSize'),
9: ('diskPercent'),
10: ('memSize'),
11: ('memUsed'),
12: ('restartDev'),
13: ('dynIpAddr'),
14: ('dynNetMask'),
15: ('dynGateway'),
16: ('staticIpAddr'),
17: ('staticNetMask'),
18: ('staticGateway'),
19: ('sysTime'),
20: ('videoInChanNum'),
21: ('videoEncode'),
22: ('videoNetTrans'),
23: ('audioAbility'),
24: ('audioInNum'),
25: ('videoOutNum'),
26: ('clarityChanNum'),
27: ('localStorage'),
28: ('rtspPlayBack'),
29: ('netAccessType'),
30: ('alarmInChanNum'),
31: ('alarmOutChanNum'),
32: ('manageServAddr'),
33: ('ntpServIpAddr'),
34: ('managePort'),
}
parsed = {}
x = 0
for value in string_table[0]:
x += 1
parsed[mib[x]] = value
return parsed
def discover_trendnet_camera(section):
# there are some OIDs which we don't really need such as the network addresses, so we filter what we discover here
discovery_mibs = [
'deviceType',
'hardwVersion',
'softwVersion',
'cpuPercent',
'diskSize',
'diskPercent',
'memSize',
'memUsed',
'sysTime',
'videoInChanNum',
'videoEncode',
'videoNetTrans',
'audioAbility',
'audioInNum',
'videoOutNum',
'clarityChanNum',
'localStorage',
'rtspPlayBack',
'netAccessType',
'alarmInChanNum',
'alarmOutChanNum',
]
for key in section:
if key in discovery_mibs: yield Service(item=key)
def check_trendnet_camera(item, params, section):
if section[item] == '': section[item] = 'No data provided'
yield Result(state=State.OK, summary=section[item])
register.snmp_section(
name = 'trendnet_camera',
detect = exists('.1.3.6.1.4.1.39165.1.1.0'),
fetch = SNMPTree(
base = '.1.3.6.1.4.1.39165.1',
oids = [
'1.0', # deviceType
'2.0', # hardwVersion
'3.0', # softwVersion
'4.0', # macAddr
'5.0', # deviceID
'6.0', # manufacturer
'7.0', # cpuPercent
'8.0', # diskSize
'9.0', # diskPercent
'10.0', # memSize
'11.0', # memUsed
'12.0', # restartDev
'13.0', # dynIpAddr
'14.0', # dynNetMask
'15.0', # dynGateway
'16.0', # staticIpAddr
'17.0', # staticNetMask
'18.0', # staticGateway
'19.0', # sysTime
'20.0', # videoInChanNum
'21.0', # videoEncode
'22.0', # videoNetTrans
'23.0', # audioAbility
'24.0', # audioInNum
'25.0', # videoOutNum
'26.0', # clarityChanNum
'27.0', # localStorage
'28.0', # rtspPlayBack
'29.0', # netAccessType
'30.0', # alarmInChanNum
'31.0', # alarmOutChanNum
'32.0', # manageServAddr
'33.0', # ntpServIpAddr
'34.0', # managePort
],
),
parse_function=parse_trendnet_camera,
)
register.check_plugin(
name='trendnet_camera',
service_name='SNMP %s',
discovery_function=discover_trendnet_camera,
check_function=check_trendnet_camera,
check_default_parameters={}
)
Result:
Just don’t forget the Hosts without system description OID
rule for the camera.