diff --git a/agent_based/inv_opengear_serial_lines.py b/agent_based/inv_opengear_serial_lines.py
new file mode 100644
index 0000000000000000000000000000000000000000..8788118df11ce6021ec6fb50f5ec345b821f0cc1
--- /dev/null
+++ b/agent_based/inv_opengear_serial_lines.py
@@ -0,0 +1,151 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 20212-07-08
+# File  : inv_opengear_serial_line
+#
+# inventory of opengear console servers serial lines
+#
+#
+
+from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+    register,
+    SNMPTree,
+    TableRow,
+    startswith,
+    OIDEnd,
+)
+from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
+    StringTable,
+    InventoryResult,
+)
+
+_opengear_state = {
+    '1': 'on',
+    '2': 'off',
+}
+
+_opengear_log_level = {
+    '1': 'disabled',
+    '2': 'connect',
+    '3': 'inputAndOutput',
+    '4': 'inputOnly',
+    '5': 'outputOnly',
+}
+
+_opengear_mode = {
+    '1': 'none',
+    '2': 'console',
+    '3': 'sdt',
+    '4': 'terminal',
+    '5': 'bridge',
+}
+
+_opengear_flow_control = {
+    '1': 'none',
+    '2': 'hardware',
+    '3': 'software',
+}
+
+_opengear_stop_bits = {
+    '1': 'one',
+    '2': 'two',
+    '3': 'oneAndAHalf',
+}
+
+_opengear_parity = {
+    '1': 'none',
+    '2': 'odd',
+    '3': 'even',
+    '4': 'mark',
+    '5': 'space',
+}
+
+
+def parse_inv_opengear_serial_lines(string_table: StringTable):
+    section = []
+
+    for index, label, speed, databits, parity, stopbits, flowcontrol, mode, loglevel, dcd, dtr, dsr, cts, rts in string_table:
+        entry = {
+            'key_columns': {
+                'index': index
+            },
+            'inventory_columns': {
+                'label': label,
+                'speed': speed,
+                'databits': databits,
+                'parity': _opengear_parity.get(parity, parity),
+                'stopbits': _opengear_stop_bits.get(stopbits, stopbits),
+                'flowcontrol': _opengear_flow_control.get(flowcontrol, flowcontrol),
+                'mode': _opengear_mode.get(mode, mode),
+                'loglevel': _opengear_log_level.get(loglevel, loglevel),
+                'cts': _opengear_state[cts],
+
+                'dcd': _opengear_state[dcd],
+                'dtr': _opengear_state[dtr],
+                'rts': _opengear_state[rts],
+            },
+            'status_columns': {
+
+            }
+        }
+
+        section.append(entry)
+
+    return section
+
+
+def inventory_bgp_peers(params, section) -> InventoryResult:
+    path = ['hardware', 'serial_lines']
+
+    for entry in section:
+        yield TableRow(
+            path=path,
+            key_columns=entry['key_columns'],
+            inventory_columns=entry['inventory_columns'],
+            status_columns=entry['status_columns']
+        )
+
+
+register.snmp_section(
+    name='inv_opengear_serial_lines',
+    parse_function=parse_inv_opengear_serial_lines,
+    fetch=SNMPTree(
+        base='.1.3.6.1.4.1.25049.17.2.1',  # OG-STATUSv2-MIB:orgSerialPortEntry
+        oids=[
+            OIDEnd(),  # line index
+            '2',  # ogSerialPortLabel
+            '3',  # ogSerialPortSpeed
+            '4',  # ogSerialPortDataBits
+            '5',  # ogSerialPortParity
+            '6',  # ogSerialPortStopBits
+            '7',  # ogSerialPortFlowControl
+            '8',  # ogSerialPortMode
+            '9',  # ogSerialPortLogLevel
+            # '10',  # ogSerialPortRxBytes
+            # '11',  # ogSerialPortTxBytes
+            # '12',  # ogSerialPortFramingErrors
+            # '13',  # ogSerialPortParityErrors
+            # '14',  # ogSerialPortOverrunErrors
+            # '15',  # ogSerialPortBreaks
+            '16',  # ogSerialPortDCD
+            '17',  # ogSerialPortDTR
+            '18',  # ogSerialPortDSR
+            '19',  # ogSerialPortCTS
+            '20',  # ogSerialPortRTS
+        ]
+    ),
+    detect=startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.25049'),  # sysObjectID == opengear
+)
+
+register.inventory_plugin(
+    name='inv_opengear_serial_lines',
+    inventory_function=inventory_bgp_peers,
+    inventory_default_parameters={
+    },
+    inventory_ruleset_name='inv_opengear_serial_lines',
+)
diff --git a/inv_opengear_serial_line.mkp b/inv_opengear_serial_line.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..9949d8527ebe1c903422bcdac9a1faad84a02c72
Binary files /dev/null and b/inv_opengear_serial_line.mkp differ
diff --git a/packages/inv_opengear_serial_line b/packages/inv_opengear_serial_line
new file mode 100644
index 0000000000000000000000000000000000000000..2d1401a5af8820a97e20a9cd84b197dc967e5cc8
--- /dev/null
+++ b/packages/inv_opengear_serial_line
@@ -0,0 +1,12 @@
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'Inventory for opengear KVM devices serial lines\n',
+ 'download_url': 'https://thl-cmk.hopto.org',
+ 'files': {'agent_based': ['inv_opengear_serial_lines.py'],
+           'web': ['plugins/views/inv_opengear_serial_lines.py']},
+ 'name': 'inv_opengear_serial_line',
+ 'num_files': 2,
+ 'title': 'opengear serial line inventory',
+ 'version': '20220708.v.0.0.1',
+ 'version.min_required': '2.0.0',
+ 'version.packaged': '2021.09.20',
+ 'version.usable_until': None}
\ No newline at end of file
diff --git a/web/plugins/views/inv_opengear_serial_lines.py b/web/plugins/views/inv_opengear_serial_lines.py
new file mode 100644
index 0000000000000000000000000000000000000000..ba5d7525d502bfce824833f442f63c6aab9c180e
--- /dev/null
+++ b/web/plugins/views/inv_opengear_serial_lines.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2022-07-08
+# File  : view/inv_opengear_serial_lines
+#
+
+from cmk.gui.i18n import _
+from cmk.gui.plugins.views import (
+    inventory_displayhints,
+)
+
+from cmk.gui.plugins.views.inventory import declare_invtable_view
+
+inventory_displayhints.update({
+    '.hardware.serial_lines:': {
+        'title': _('Serial lines'),
+        'keyorder': [
+            'index',
+            'label', 
+            'speed', 'databits', 'parity', 'stopbits', 'flowcontrol'
+        ],
+        'view': 'invseriallines_of_host',
+    },
+    '.hardware.serial_lines:*.index': {'title': _('Index'), },
+    '.hardware.serial_lines:*.label': {'title': _('Label'), },
+    '.hardware.serial_lines:*.speed': {'title': _('Speed'), },
+    '.hardware.serial_lines:*.databits': {'title': _('Data bits'), },
+    '.hardware.serial_lines:*.parity': {'title': _('Parity'), },
+    '.hardware.serial_lines:*.stopbits': {'title': _('Stop bits'), },
+    '.hardware.serial_lines:*.flowcontrol': {'title': _('Flow control'), },
+    '.hardware.serial_lines:*.cts': {'title': _('CTS'), },
+    '.hardware.serial_lines:*.dcd': {'title': _('DCD'), },
+    '.hardware.serial_lines:*.dtr': {'title': _('DTR'), },
+    '.hardware.serial_lines:*.rts': {'title': _('RTS'), },
+})
+
+declare_invtable_view('invseriallines', '.hardware.serial_lines:', _('Serial lines'), _('Serial lines'))