Language selection:
Skip to main navigation Skip to main content Skip to page footer

Didactum Monitoring Devices and Sensors – Integration into Opmantek NMIS

This guide describes the complete integration of Didactum Monitoring devices into Opmantek NMIS (Network Management Information System), Version 8.x and 9.x (also known as Firstwave NMIS). The goal is central monitoring of all sensors – temperature, humidity, leakage, voltage, door contacts and others – via a custom NMIS Device Model, including RRD trend graphs, proactive threshold alerts and SNMP Trap processing.

Product History Note: NMIS has been developed by Opmantek since 1999 and is available as Open Source under GPL. Opmantek was acquired by Firstwave; the product has since been further developed as Firstwave NMIS. NMIS 8 and NMIS 9 use identical model file structures – this guide is valid for both versions, version-specific differences are explicitly marked.

1. Basics and Architecture

NMIS collects fault, performance and configuration data from network devices via SNMP. Extensibility is based on a Device Model system: For each device type, a Perl hash file defines which OIDs are queried, how the data is stored in RRD databases, which graphs are generated and which thresholds trigger alerts. A custom model is created for Didactum devices.

NMIS Model Architecture

FilePurposeRelevance for Didactum
Model-Didactum.nmisDevice-specific model: OIDs, RRD types, graph types, threshold namesCentral file – all Didactum OIDs are defined here
Common-database.nmisRRD file paths for all metricsStorage paths for temperature, leakage, humidity etc.
Common-heading.nmisLabels for graphsReadable names for graph headings
Common-stats.nmisRRDtool definitions for statistic calculationsMin/Max/Avg calculations for sensor values
Common-threshold.nmisThreshold definitions (warning, minor, major, critical, fatal)Alarm limits for all Didactum sensors
Common-graph-*.nmisGraph templates (RRDtool definitions for graphics)Visualization of temperature and sensor trends

NMIS Directory Structure

Path (NMIS 8)Path (NMIS 9)Content
/usr/local/nmis8/models//usr/local/nmis9/models-default/Integrated standard models (do not edit)
/usr/local/nmis8/models-custom//usr/local/nmis9/models-custom/Custom/adapted models (place Didactum model here)
/usr/local/nmis8/conf//usr/local/nmis9/conf/Configuration files (Nodes, System Config)
/usr/local/nmis8/database//usr/local/nmis9/database/RRD databases for time series data
/usr/local/nmis8/logs//usr/local/nmis9/logs/Log files

Processing Flow for Didactum Sensors

  1. NMIS polls the Didactum device via SNMP based on the Device Model.
  2. OID values are read and written to RRD files.
  3. At every Threshold check, values are checked against thresholds.
  4. Threshold violations generate NMIS events (Proactive Alerts).
  5. Events trigger notifications via email or escalation.
  6. Trend graphs are automatically generated from the RRD data.

2. Prerequisites

  • Opmantek NMIS 8.x or NMIS 9.x on a Linux server (CentOS/RHEL 7+ or Ubuntu 18+)
  • NMIS Web Interface accessible (default: Port 80 or 443)
  • Root access to the NMIS server for model files
  • Perl with SNMP modules (Net::SNMP, SNMP) – usually installed with NMIS
  • SNMP tools (snmpwalk, snmpget) for preparation
  • Didactum Monitoring device reachable in the network, SNMP enabled
  • UDP Port 161 allowed from NMIS server to Didactum device
  • UDP Port 162 allowed on the NMIS server for SNMP Traps
  • SNMP Community String known (default: public)

Example Network Configuration

DeviceIP AddressRole
NMIS Server192.168.1.96Monitoring Server, Web Interface, Trap Receiver
Didactum Monitoring Unit192.168.1.100Monitored device (SNMP Agent)

3. SNMP Preparation on the Didactum Device

3.1 Enable SNMP

  1. Call up the Didactum Web Interface: 192.168.1.100, login with admin account.
  2. Navigation: Settings → Network → SNMP.
  3. Set the following parameters:
    • SNMP enabled: Yes
    • SNMP Version: v2c
    • Community String: public (change in production)
    • SNMP Port: 161
    • Allowed Managers: IP of the NMIS server (192.168.1.96)
    • SNMP Trap Receiver: IP of the NMIS server, Port 162
  4. Save settings.

3.2 Test Reachability and Perform SNMP Walk

# SNMP Walk – all Didactum OIDs:
snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854

# Temperature Sensor 1 (raw value × 10):
snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1

# System OID (for model detection):
snmpget -v2c -c public 192.168.1.100 1.3.6.1.2.1.1.2.0

# NMIS own SNMP tool (NMIS 8):
/usr/local/nmis8/bin/nmis.pl type=snmpwalk node=didactum-rack01

# NMIS own SNMP tool (NMIS 9):
/usr/local/nmis9/bin/nmis-cli.pl snmpwalk=didactum-rack01

Important: 

Didactum returns temperature and voltage values with a factor of 10 (235 = 23.5°C). This is handled in the NMIS model via the calculate option or directly in Common-threshold.nmis.

4. Prepare NMIS

4.1 Check NMIS Services

# NMIS service status (NMIS 8):
/usr/local/nmis8/bin/nmis.pl type=status

# NMIS service status (NMIS 9):
systemctl status nmis9d
# or:
/usr/local/nmis9/bin/nmis-cli.pl status

# Call Web Interface:
# 192.168.1.96/nmis8  (NMIS 8)
# 192.168.1.96/nmis9  (NMIS 9)

4.2 Load Didactum MIB File into NMIS

# Copy MIB file to NMIS MIB directory:
sudo cp DIDACTUM-RACKMONI2-MIB.mib /usr/local/nmis8/mibs/
# or for NMIS 9:
sudo cp DIDACTUM-RACKMONI2-MIB.mib /usr/local/nmis9/mibs/

# Process MIB with NMIS tool (NMIS 8):
/usr/local/nmis8/bin/nmis-mibs.pl action=load mib=DIDACTUM-RACKMONI2-MIB

# System SNMP MIB directory (for snmpwalk name resolution):
sudo cp DIDACTUM-RACKMONI2-MIB.mib /usr/share/snmp/mibs/
echo "mibs +DIDACTUM-RACKMONI2-MIB" | sudo tee -a /etc/snmp/snmp.conf

4.3 Use Model Tool for Automatic Model Generation (NMIS 9)

NMIS 9 provides a powerful tool that automatically generates a base model from an SNMP walk:

# First create node (Section 5), then generate model automatically:
/usr/local/nmis9/admin/model_tool.pl \
  node=didactum-rack01 \
  model=Didactum-RackMonitor \
  common_exclude="Windows|^tcp|^udp"

# Generated model is located in:
# /usr/local/nmis9/models-custom/Model-Didactum-RackMonitor.nmis

# Edit model and add Didactum-specific OIDs (Section 6).

5. Add Didactum Device as Node

5.1 Add Node via Web Interface

  1. Open NMIS Web Interface.
  2. Navigation: System → Add/Edit Nodes and Devices.
  3. Add new node – fill in the following fields:
    • Name: didactum-rack01 (no spaces, pay attention to case)
    • Host (IP/DNS): 192.168.1.100
    • Group: Didactum-Monitoring (new group)
    • Role: access (or core depending on classification)
    • Type: generic
    • Model: Automatic (initially, will be changed to custom model later)
    • SNMP version: snmpv2c
    • SNMP Community: public
    • Collect: true
    • Active: true
  4. Click on Add and Update Node.

5.2 Add Node via Command Line (NMIS 8)

# Open Nodes configuration file:
sudo nano /usr/local/nmis8/conf/Nodes.nmis

# Add new entry:
'didactum-rack01' => {
    'active'        => 'true',
    'collect'       => 'true',
    'host'          => '192.168.1.100',
    'group'         => 'Didactum-Monitoring',
    'model'         => 'Automatic',
    'netType'       => 'lan',
    'roleType'      => 'access',
    'community'     => 'public',
    'version'       => 'snmpv2c',
    'ping'          => 'true',
    'snmpport'      => '161',
    'threshold'     => 'true',
    'rancid'        => 'false',
    'location'      => 'Server room A, Rack 03',
    'notes'         => 'Didactum Rack Monitoring Unit II',
},
# Check syntax:
perl -c /usr/local/nmis8/conf/Nodes.nmis
# Trigger node update:
/usr/local/nmis8/bin/nmis.pl type=update node=didactum-rack01

5.3 Node via CSV Import (for multiple devices)

# CSV Import Script:
/usr/local/nmis8/admin/import_nodes.pl /tmp/didactum_nodes.csv

# CSV Format (example didactum_nodes.csv):
# name,host,group,model,version,community,collect,active
# didactum-rack01,192.168.1.100,Didactum-Monitoring,Automatic,snmpv2c,public,true,true
# didactum-rack02,192.168.1.101,Didactum-Monitoring,Automatic,snmpv2c,public,true,true

5.4 Check Node Status After Creation

# Start manual update run:
/usr/local/nmis8/bin/nmis.pl type=update node=didactum-rack01

# Or for NMIS 9:
/usr/local/nmis9/bin/nmis-cli.pl act=update node=didactum-rack01

# In Web Interface:
# System → Node Admin → didactum-rack01 → Check status
# SNMP status should show "ok", ping should be "Reachable"

6. Create Device Model for Didactum

The Device Model is the central configuration file that determines which OIDs NMIS queries from the Didactum device and how they are stored and visualized.

6.1 Create Model File

# NMIS 8:
sudo nano /usr/local/nmis8/models-custom/Model-Didactum.nmis

# NMIS 9:
sudo nano /usr/local/nmis9/models-custom/Model-Didactum.nmis
#############################################################################
# Model-Didactum.nmis
# NMIS Device Model for Didactum Rack Monitoring Units
# Supported OIDs: Temperature, Leakage, Humidity, Voltage,
#                 Door Contact, Smoke Detector, Motion Sensor
# Enterprise OID Base: 1.3.6.1.4.1.3854
#############################################################################
%hash = (
  'system' => {
    'nodegraph' => 'response,didactum-temperature,didactum-humidity,didactum-status',
    'nodeModel'  => 'Didactum',
    'nodeType'   => 'generic',
    'nodeVendor' => 'Didactum',
    'sys' => {
      'standard' => {
        'snmp' => {
          'sysDescr' => {
            'oid'     => 'sysDescr',
            'title'   => 'Description',
          },
          'sysObjectID' => {
            'oid'     => 'sysObjectID',
            'title'   => 'Object ID',
          },
          'sysUpTime' => {
            'oid'     => 'sysUpTime',
            'title'   => 'Uptime',
          },
          'sysContact' => {
            'oid'     => 'sysContact',
            'title'   => 'Contact',
          },
          'sysName' => {
            'oid'     => 'sysName',
            'title'   => 'Name',
          },
          'sysLocation' => {
            'oid'     => 'sysLocation',
            'title'   => 'Location',
          },
        },
      },
    },
  },
  'systemHealth' => {
    'sections' => 'didactum_temperature,didactum_humidity,didactum_status,didactum_voltage',
    'rrd' => {
      # ── TEMPERATURE SENSORS ─────────────────────────────────────────────
      'didactum_temperature' => {
        'graphtype'   => 'didactum-temperature',
        'indexed'     => 'false',
        'threshold'   => 'didactum_temp',
        'snmp' => {
          'tempValue1' => {
            'oid'     => '.1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1',
            'title'   => 'Temperature Sensor 1 (x10)',
            'option'  => 'gauge,0:U',
            'calculate' => '$r / 10',
          },
          'tempValue2' => {
            'oid'     => '.1.3.6.1.4.1.3854.1.2.2.1.16.1.3.2',
            'title'   => 'Temperature Sensor 2 (x10)',
            'option'  => 'gauge,0:U',
            'calculate' => '$r / 10',
          },
          'tempValue3' => {
            'oid'     => '.1.3.6.1.4.1.3854.1.2.2.1.16.1.3.3',
            'title'   => 'Temperature Sensor 3 (x10)',
            'option'  => 'gauge,0:U',
            'calculate' => '$r / 10',
          },
          'tempStatus1' => {
            'oid'     => '.1.3.6.1.4.1.3854.1.2.2.1.16.1.4.1',
            'title'   => 'Temp Status S1',
            'option'  => 'gauge,0:U',
            'threshold' => 'didactum_temp_status',
          },
        },
      },
      # ── HUMIDITY ───────────────────────────────────────────────────────
      'didactum_humidity' => {
        'graphtype'   => 'didactum-humidity',
        'indexed'     => 'false',
        'threshold'   => 'didactum_humidity',
        'snmp' => {
          'humValue1' => {
            'oid'     => '.1.3.6.1.4.1.3854.1.2.2.1.17.1.3.1',
            'title'   => 'Humidity Sensor 1',
            'option'  => 'gauge,0:100',
          },
          'humValue2' => {
            'oid'     => '.1.3.6.1.4.1.3854.1.2.2.1.17.1.3.2',
            'title'   => 'Humidity Sensor 2',
            'option'  => 'gauge,0:100',
          },
        },
      },
      # ── LEAKAGE AND STATUS SENSORS ─────────────────────────────────────
      'didactum_status' => {
        'graphtype'   => 'didactum-status',
        'indexed'     => 'false',
        'snmp' => {
          'leakStatus1' => {
            'oid'       => '.1.3.6.1.4.1.3854.1.2.2.1.18.1.4.1',
            'title'     => 'Leakage Sensor 1',
            'option'    => 'gauge,0:1',
            'threshold' => 'didactum_leak',
          },
          'leakStatus2' => {
            'oid'       => '.1.3.6.1.4.1.3854.1.2.2.1.18.1.4.2',
            'title'     => 'Leakage Sensor 2',
            'option'    => 'gauge,0:1',
            'threshold' => 'didactum_leak',
          },
          'doorStatus1' => {
            'oid'       => '.1.3.6.1.4.1.3854.1.2.2.1.10.1.3.1',
            'title'     => 'Door Contact Sensor 1',
            'option'    => 'gauge,0:1',
            'threshold' => 'didactum_door',
          },
          'smokeStatus1' => {
            'oid'       => '.1.3.6.1.4.1.3854.1.2.2.1.14.1.3.1',
            'title'     => 'Smoke Detector Sensor 1',
            'option'    => 'gauge,0:1',
            'threshold' => 'didactum_smoke',
          },
          'vibStatus1' => {
            'oid'       => '.1.3.6.1.4.1.3854.1.2.2.1.11.1.3.1',
            'title'     => 'Motion Sensor 1',
            'option'    => 'gauge,0:1',
            'threshold' => 'didactum_door',
          },
        },
      },
      # ── VOLTAGE SENSORS ────────────────────────────────────────────────
      'didactum_voltage' => {
        'graphtype'   => 'didactum-voltage',
        'indexed'     => 'false',
        'threshold'   => 'didactum_voltage',
        'snmp' => {
          'voltValue1' => {
            'oid'       => '.1.3.6.1.4.1.3854.1.2.2.1.15.1.3.1',
            'title'     => 'Voltage Sensor 1 (x10)',
            'option'    => 'gauge,0:U',
            'calculate' => '$r / 10',
          },
        },
      },
    }, # end rrd
  }, # end systemHealth
); # end hash

6.2 Check Model Syntax

# Check syntax of the model file (mandatory after every change!):
perl -c /usr/local/nmis8/models-custom/Model-Didactum.nmis

# Output "syntax OK" means: no syntax errors.
# Output with error message: line and error type are displayed.

6.3 Switch Node to New Model

  1. NMIS Web Interface: System → Add/Edit Nodes → Edit node didactum-rack01.
  2. Field Model: change from Automatic to Didactum.
  3. Click on Save and Update Node.
# Or via command line (NMIS 8) in Nodes.nmis:
# 'model' => 'Didactum',

# Execute update:
/usr/local/nmis8/bin/nmis.pl type=update node=didactum-rack01

7. Configure Common Files

For complete graphs and thresholds, the NMIS Common files must be extended with Didactum-specific entries. These files are located in the models-custom directory (create your own copy, do not overwrite the standard files).

7.1 Common-database.nmis – RRD File Paths

# Copy existing file and extend:
sudo cp /usr/local/nmis8/models/Common-database.nmis \
        /usr/local/nmis8/models-custom/Common-database.nmis

sudo nano /usr/local/nmis8/models-custom/Common-database.nmis

Add the following entries in the %hash in the 'database' section:

# Didactum database paths (insert into the database hash):
'didactum_temperature'  => '/nodes/$node/health/didactum-temperature.rrd',
'didactum_humidity'     => '/nodes/$node/health/didactum-humidity.rrd',
'didactum_status'       => '/nodes/$node/health/didactum-status.rrd',
'didactum_voltage'      => '/nodes/$node/health/didactum-voltage.rrd',

7.2 Common-heading.nmis – Graph Headings

sudo cp /usr/local/nmis8/models/Common-heading.nmis \
        /usr/local/nmis8/models-custom/Common-heading.nmis

# Add entries:
'didactum-temperature'  => 'Didactum Temperature (°C)',
'didactum-humidity'     => 'Didactum Humidity (% rF)',
'didactum-status'       => 'Didactum Status Sensors',
'didactum-voltage'      => 'Didactum Voltage (V)',

7.3 Common-stats.nmis – Statistics Definitions

# In Common-stats.nmis add the following entries in the 'stats' hash:
'didactum_temperature' => [
    'DEF:tempValue1=$database:tempValue1:AVERAGE',
    'DEF:tempValue2=$database:tempValue2:AVERAGE',
    'PRINT:tempValue1:AVERAGE:tempValue1=%1.1lf',
    'PRINT:tempValue1:MAX:tempValue1_max=%1.1lf',
    'PRINT:tempValue2:AVERAGE:tempValue2=%1.1lf',
],
'didactum_status' => [
    'DEF:leakStatus1=$database:leakStatus1:AVERAGE',
    'PRINT:leakStatus1:AVERAGE:leakStatus1=%1.0lf',
    'DEF:doorStatus1=$database:doorStatus1:AVERAGE',
    'PRINT:doorStatus1:AVERAGE:doorStatus1=%1.0lf',
],

7.4 Check Syntax of All Common Files After Changes

# Check all modified Common files:
perl -c /usr/local/nmis8/models-custom/Common-database.nmis
perl -c /usr/local/nmis8/models-custom/Common-heading.nmis
perl -c /usr/local/nmis8/models-custom/Common-stats.nmis
perl -c /usr/local/nmis8/models-custom/Common-threshold.nmis

8. OID Reference for NMIS

All OIDs are based on the Didactum Enterprise OID base 1.3.6.1.4.1.3854. The placeholder {n} stands for the sensor index.

8.1 Temperature Sensors

OIDDescriptionRaw ValueNMIS CalculateNMIS Option
1.3.6.1.4.1.3854.1.2.2.1.16.1.3.{n}Temperature value sensor n°C × 10$r / 10gauge,0:U
1.3.6.1.4.1.3854.1.2.2.1.16.1.4.{n}Temperature status sensor nEnum 0/1/2gauge,0:U
1.3.6.1.4.1.3854.1.2.2.1.16.1.7.{n}Upper limit sensor n°C × 10$r / 10gauge,0:U
1.3.6.1.4.1.3854.1.2.2.1.16.1.8.{n}Lower limit sensor n°C × 10$r / 10gauge,0:U
1.3.6.1.4.1.3854.1.2.2.1.16.1.2.{n}Sensor name nText

8.2 Leakage and Binary Sensors

OIDDescriptionRaw ValueNMIS Threshold Name
1.3.6.1.4.1.3854.1.2.2.1.18.1.4.{n}Leakage status sensor n0=OK, 1=Leakagedidactum_leak
1.3.6.1.4.1.3854.1.2.2.1.10.1.3.{n}Door contact status n0=closed, 1=opendidactum_door
1.3.6.1.4.1.3854.1.2.2.1.14.1.3.{n}Smoke detector status n0=OK, 1=Alarmdidactum_smoke
1.3.6.1.4.1.3854.1.2.2.1.11.1.3.{n}Vibration / Motion n0=none, 1=Alarmdidactum_door

8.3 Humidity and Voltage

OIDDescriptionRaw ValueNMIS CalculateNMIS Option
1.3.6.1.4.1.3854.1.2.2.1.17.1.3.{n}Humidity value sensor n% rFgauge,0:100
1.3.6.1.4.1.3854.1.2.2.1.17.1.4.{n}Humidity status nEnum 0/1/2gauge,0:U
1.3.6.1.4.1.3854.1.2.2.1.15.1.3.{n}Voltage value sensor nV × 10$r / 10gauge,0:U
1.3.6.1.4.1.3854.1.2.2.1.15.1.4.{n}Voltage status sensor nEnum 0/1/2gauge,0:U
1.3.6.1.2.1.1.3.0System UptimeHundredths of a secondgauge,0:U

9. Configure Thresholds and Alerting

9.1 Common-threshold.nmis – Threshold Definitions

sudo cp /usr/local/nmis8/models/Common-threshold.nmis \
        /usr/local/nmis8/models-custom/Common-threshold.nmis

sudo nano /usr/local/nmis8/models-custom/Common-threshold.nmis

Add the following entries in the threshold hash:

#####################################################################
# Didactum Thresholds
# All temperature values are already in °C after calculate ($r / 10)
#####################################################################

# Temperature thresholds (IT rack):
'didactum_temp' => {
    'item'   => 'tempValue1',
    'event'  => 'Proactive Didactum Temperature',
    'select' => {
        'default' => {
            'value' => {
                'fatal'    => '40',    # 40.0 °C
                'critical' => '35',    # 35.0 °C
                'major'    => '32',    # 32.0 °C
                'minor'    => '30',    # 30.0 °C
                'warning'  => '28',    # 28.0 °C
            },
        },
    },
},

# Leakage thresholds (binary: 0=OK, 1=Alarm):
'didactum_leak' => {
    'item'   => 'leakStatus1',
    'event'  => 'Proactive Didactum Leak Detected',
    'select' => {
        'default' => {
            'value' => {
                'fatal'    => '1',
                'critical' => '1',
                'major'    => '1',
                'minor'    => '1',
                'warning'  => '0.5',
            },
        },
    },
},

# Door contact / motion:
'didactum_door' => {
    'item'   => 'doorStatus1',
    'event'  => 'Proactive Didactum Door Open',
    'select' => {
        'default' => {
            'value' => {
                'major'    => '1',
                'minor'    => '1',
                'warning'  => '0.5',
            },
        },
    },
},

# Smoke detector:
'didactum_smoke' => {
    'item'   => 'smokeStatus1',
    'event'  => 'Proactive Didactum Smoke Alarm',
    'select' => {
        'default' => {
            'value' => {
                'fatal'    => '1',
                'critical' => '1',
                'major'    => '1',
                'warning'  => '0.5',
            },
        },
    },
},

# Humidity:
'didactum_humidity' => {
    'item'   => 'humValue1',
    'event'  => 'Proactive Didactum Humidity',
    'select' => {
        'default' => {
            'value' => {
                'fatal'    => '80',    # above 80 % rF
                'critical' => '75',    # above 75 % rF
                'major'    => '70',    # above 70 % rF
                'warning'  => '65',    # above 65 % rF
            },
            'low_value' => {
                'warning'  => '20',    # below 20 % rF
                'minor'    => '15',
                'critical' => '10',
            },
        },
    },
},

# Voltage thresholds (after calculate: already in V):
'didactum_voltage' => {
    'item'   => 'voltValue1',
    'event'  => 'Proactive Didactum Voltage',
    'select' => {
        'default' => {
            'value' => {
                'fatal'    => '260',   # above 260 V
                'critical' => '253',   # above 253 V (EN 50160 +10%)
                'warning'  => '250',
            },
            'low_value' => {
                'warning'  => '210',
                'critical' => '207',   # below 207 V (EN 50160 -10%)
                'fatal'    => '196',
            },
        },
    },
},

9.2 Manually Execute Threshold Run

# Manually start threshold check (NMIS 8):
/usr/local/nmis8/bin/nmis.pl type=threshold node=didactum-rack01 debug=true

# NMIS 9:
/usr/local/nmis9/bin/nmis-cli.pl act=threshold node=didactum-rack01

# Check events in Web Interface:
# System → Events → Filter: Node = didactum-rack01

9.3 Configure Email Notification

  1. Navigation: System → System Configuration → Escalations.
  2. Create escalation rule for Didactum alerts:
    • Event: Proactive Didactum Leak Detected
    • Level: Fatal
    • Contact: Contact1 (configure with email beforehand)
    • Delay: 0 minutes (immediate)
# Contact configuration in /usr/local/nmis8/conf/Contacts.nmis:
'Contact1' => {
    'name'  => 'IT Administrator',
    'email' => 'admin@example.com',
    'pager' => '+4915112345678',
    'mobile'=> '+4915112345678',
    'phone' => '',
},

9.4 Recommended Thresholds

Threshold NameWarningMajorCriticalFatalStandard
didactum_temp (°C)28303540ASHRAE A1: 15–32 °C
didactum_humidity (% rF)65 / <2070 / <1575 / <1080ASHRAE: 20–80 % rF
didactum_leak1Immediate alarm
didactum_voltage (V)250 / <210253 / <207260 / <196EN 50160 ±10 %
didactum_door1Policy dependent
didactum_smoke1Immediate alarm

10. SNMP Trap Integration

NMIS receives SNMP Traps via the integrated trap handling. Incoming traps are assigned to the sending node and processed as events.

10.1 Activate SNMP Trap Receiver in NMIS

# NMIS 8 – Check Trap Daemon:
ps aux | grep snmptrapd
# or:
/usr/local/nmis8/bin/nmis.pl type=daemon action=start

# Open firewall for traps:
sudo firewall-cmd --permanent --add-port=162/udp
sudo firewall-cmd --reload

# Trap Handler Configuration (NMIS 8):
cat /usr/local/nmis8/conf/Traphandler.nmis

10.2 Trap Event Definitions for Didactum

# In /usr/local/nmis8/conf/Traphandler.nmis or
# /usr/local/nmis8/models-custom/Common-trap.nmis add entries:

# Leakage Trap:
'.1.3.6.1.4.1.3854.1.7.2' => {
    'event'    => 'Didactum Leakage Alarm',
    'severity' => 'Fatal',
    'message'  => 'LEAKAGE detected on $node – Immediate action required!',
},

# Temperature Alarm Trap:
'.1.3.6.1.4.1.3854.1.7.1' => {
    'event'    => 'Didactum Temperature Alarm',
    'severity' => 'Critical',
    'message'  => 'Temperature alarm on $node',
},

# Smoke Detector Trap:
'.1.3.6.1.4.1.3854.1.7.14' => {
    'event'    => 'Didactum Smoke Detector Alarm',
    'severity' => 'Fatal',
    'message'  => 'SMOKE DETECTOR triggered on $node!',
},

# Door Contact Trap:
'.1.3.6.1.4.1.3854.1.7.10' => {
    'event'    => 'Didactum Door Contact Open',
    'severity' => 'Major',
    'message'  => 'Door contact open on $node',
},

# Device Restart:
'.1.3.6.1.4.1.3854.1.7.99' => {
    'event'    => 'Didactum Node Reboot',
    'severity' => 'Warning',
    'message'  => 'Didactum device $node was restarted',
},

10.3 Important Didactum Trap OIDs

Trap OIDEventNMIS Severity
1.3.6.1.4.1.3854.1.7.1Temperature AlarmCritical
1.3.6.1.4.1.3854.1.7.2Leakage AlarmFatal
1.3.6.1.4.1.3854.1.7.3Humidity AlarmMajor
1.3.6.1.4.1.3854.1.7.4Voltage AlarmCritical
1.3.6.1.4.1.3854.1.7.10Door Contact OpenMajor
1.3.6.1.4.1.3854.1.7.14Smoke Detector AlarmFatal
1.3.6.1.4.1.3854.1.7.99Device RestartWarning

10.4 Perform Trap Test

# Send test trap for leakage to NMIS:
snmptrap -v2c -c public 192.168.1.96 '' \
  .1.3.6.1.4.1.3854.1.7.2 \
  .1.3.6.1.4.1.3854.1.2.2.1.18.1.4.1 i 1

# Check event in NMIS Web Interface:
# System → Events → Filter: Node = didactum-rack01

11. Graphs and Reports

11.1 Call Up NMIS Graphs

  1. Open NMIS Web Interface.
  2. Navigation: Network → Node View → Select node didactum-rack01.
  3. Tab Health → All Didactum graphs are displayed.
  4. Time ranges: Daily graph (default), week, month, year.
  5. Node Health Dashboard shows all sensor values at a glance.

11.2 Start Complete Collect/Update Cycle

# Collect run (collect data):
/usr/local/nmis8/bin/nmis.pl type=collect node=didactum-rack01

# Update run (discovery and update graphs):
/usr/local/nmis8/bin/nmis.pl type=update node=didactum-rack01

# Threshold check:
/usr/local/nmis8/bin/nmis.pl type=threshold node=didactum-rack01

# All nodes (daily cron run):
/usr/local/nmis8/bin/nmis.pl type=collect
/usr/local/nmis8/bin/nmis.pl type=update
/usr/local/nmis8/bin/nmis.pl type=threshold

11.3 Node Health Dashboard

  1. Navigation: Network → Network Health.
  2. Group filter: Didactum-Monitoring.
  3. Overview of all Didactum nodes with current status, last event and health score.

11.4 Reports from NMIS

  1. Navigation: System → Reports.
  2. Report type: Node Availability or Event Report.
  3. Filter: Group Didactum-Monitoring, period: Last month.
  4. Export as PDF or HTML for monthly evaluations.

12. Troubleshooting

ProblemPossible Cause / Solution
Node shows "SNMP Down" eventWrong community string? (snmpget -v2c -c public 192.168.1.100 sysDescr.0). Firewall UDP 161 allowed? SNMP enabled on Didactum device? Allowed Managers restriction on device?
Model file is not loadedSyntax error: perl -c /usr/local/nmis8/models-custom/Model-Didactum.nmis. Node switched to the model? Update run executed after model change?
Temperature value wrong (235 instead of 23.5)'calculate' => '$r / 10' missing in model OID entry. Check model file with perl -c after change and execute update.
No RRD graphs appearRRD paths correct in Common-database.nmis? Collect run executed? RRD directory writable: ls -la /usr/local/nmis8/database/nodes/didactum-rack01/.
Threshold events are not generatedThreshold name in model matches Common-threshold.nmis? Threshold run executed: nmis.pl type=threshold debug=true. Check debug output for errors.
SNMP Traps do not arriveUDP Port 162 allowed on NMIS server? NMIS Trap Daemon running? Correct IP set as Trap Receiver on Didactum device? Community string correct?
Common file syntax errorCheck all modified Common files with perl -c. Pay attention to hash commas and brackets. NMIS uses strict Perl hash syntax.
Node update takes a very long timeIncrease SNMP timeout: Node configuration → snmptimeout. Or check community string. Debug: nmis.pl type=update node=didactum-rack01 debug=true 2>&1 | head -50.

Diagnosis Commands Overview

# Check NMIS status (NMIS 8):
/usr/local/nmis8/bin/nmis.pl type=status

# NMIS Self-Test:
/usr/local/nmis8/bin/nmis.pl type=self_test

# Node collect + update + threshold in one pass:
/usr/local/nmis8/bin/nmis.pl type=collect node=didactum-rack01 debug=true
/usr/local/nmis8/bin/nmis.pl type=update node=didactum-rack01 debug=true
/usr/local/nmis8/bin/nmis.pl type=threshold node=didactum-rack01 debug=true

# SNMP Walk via NMIS:
/usr/local/nmis8/bin/nmis.pl type=snmpwalk node=didactum-rack01

# Check model file syntax:
perl -c /usr/local/nmis8/models-custom/Model-Didactum.nmis
perl -c /usr/local/nmis8/models-custom/Common-threshold.nmis

# Monitor NMIS log in real time:
sudo tail -f /usr/local/nmis8/logs/nmis.log

# Event log:
sudo tail -f /usr/local/nmis8/logs/event.log

# Test SNMP reachability directly:
snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854
snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1

# Send test trap:
snmptrap -v2c -c public 192.168.1.96 '' \
  .1.3.6.1.4.1.3854.1.7.2 \
  .1.3.6.1.4.1.3854.1.2.2.1.18.1.4.1 i 1

# Model Tool (NMIS 9) – Generate base model from SNMP walk:
/usr/local/nmis9/admin/model_tool.pl \
  node=didactum-rack01 \
  model=Didactum \
  common_exclude="Windows"

# Export Nodes file:
/usr/local/nmis8/admin/export_nodes.pl /tmp/nodes_export.csv

# Open firewall port for traps:
sudo firewall-cmd --permanent --add-port=162/udp
sudo firewall-cmd --reload

Appendix: NMIS Configuration Quick Reference

File / Path (NMIS 8)Purpose
/usr/local/nmis8/models-custom/Model-Didactum.nmisDidactum Device Model: OIDs, graph types, threshold references
/usr/local/nmis8/models-custom/Common-database.nmisRRD file paths for Didactum metrics
/usr/local/nmis8/models-custom/Common-heading.nmisReadable graph headings
/usr/local/nmis8/models-custom/Common-stats.nmisRRDtool statistics definitions
/usr/local/nmis8/models-custom/Common-threshold.nmisThreshold definitions (warning to fatal)
/usr/local/nmis8/conf/Nodes.nmisNode list (all monitored devices)
/usr/local/nmis8/conf/Contacts.nmisContact addresses for notifications
/usr/local/nmis8/conf/Escalations.nmisEscalation rules for events
/usr/local/nmis8/database/nodes/didactum-rack01/RRD files of the Didactum node
/usr/local/nmis8/logs/nmis.logNMIS main log
/usr/local/nmis8/logs/event.logEvent log (all alarms)

For firmware-specific OIDs and supported sensor types, always consult the current Didactum device documentation. NMIS documentation: docs.community.firstwave.com.

This website uses cookies

This website uses cookies to improve user experience. By using our website you consent to all cookies in accordance with our Cookie Policy.

Essential cookies enable basic functions and are necessary for the website to function properly.
Statistics cookies collect information anonymously. This information helps us to understand how our visitors use our website.
Marketing cookies are used by third parties or publishers to display personalized advertisements. They do this by tracking visitors across websites.