Developing my first SNMP plugin

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.