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
| File | Purpose | Relevance for Didactum |
|---|---|---|
| Model-Didactum.nmis | Device-specific model: OIDs, RRD types, graph types, threshold names | Central file – all Didactum OIDs are defined here |
| Common-database.nmis | RRD file paths for all metrics | Storage paths for temperature, leakage, humidity etc. |
| Common-heading.nmis | Labels for graphs | Readable names for graph headings |
| Common-stats.nmis | RRDtool definitions for statistic calculations | Min/Max/Avg calculations for sensor values |
| Common-threshold.nmis | Threshold definitions (warning, minor, major, critical, fatal) | Alarm limits for all Didactum sensors |
| Common-graph-*.nmis | Graph 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
- NMIS polls the Didactum device via SNMP based on the Device Model.
- OID values are read and written to RRD files.
- At every Threshold check, values are checked against thresholds.
- Threshold violations generate NMIS events (Proactive Alerts).
- Events trigger notifications via email or escalation.
- 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
| Device | IP Address | Role |
|---|---|---|
| NMIS Server | 192.168.1.96 | Monitoring Server, Web Interface, Trap Receiver |
| Didactum Monitoring Unit | 192.168.1.100 | Monitored device (SNMP Agent) |
3. SNMP Preparation on the Didactum Device
3.1 Enable SNMP
- Call up the Didactum Web Interface: 192.168.1.100, login with admin account.
- Navigation: Settings → Network → SNMP.
- 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
- 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
- Open NMIS Web Interface.
- Navigation: System → Add/Edit Nodes and Devices.
- 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
- 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 hash6.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
- NMIS Web Interface: System → Add/Edit Nodes → Edit node didactum-rack01.
- Field Model: change from Automatic to Didactum.
- 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.nmisAdd 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
| OID | Description | Raw Value | NMIS Calculate | NMIS Option |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.{n} | Temperature value sensor n | °C × 10 | $r / 10 | gauge,0:U |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.4.{n} | Temperature status sensor n | Enum 0/1/2 | – | gauge,0:U |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.7.{n} | Upper limit sensor n | °C × 10 | $r / 10 | gauge,0:U |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.8.{n} | Lower limit sensor n | °C × 10 | $r / 10 | gauge,0:U |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.2.{n} | Sensor name n | Text | – | – |
8.2 Leakage and Binary Sensors
| OID | Description | Raw Value | NMIS Threshold Name |
|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.18.1.4.{n} | Leakage status sensor n | 0=OK, 1=Leakage | didactum_leak |
| 1.3.6.1.4.1.3854.1.2.2.1.10.1.3.{n} | Door contact status n | 0=closed, 1=open | didactum_door |
| 1.3.6.1.4.1.3854.1.2.2.1.14.1.3.{n} | Smoke detector status n | 0=OK, 1=Alarm | didactum_smoke |
| 1.3.6.1.4.1.3854.1.2.2.1.11.1.3.{n} | Vibration / Motion n | 0=none, 1=Alarm | didactum_door |
8.3 Humidity and Voltage
| OID | Description | Raw Value | NMIS Calculate | NMIS Option |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.3.{n} | Humidity value sensor n | % rF | – | gauge,0:100 |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.4.{n} | Humidity status n | Enum 0/1/2 | – | gauge,0:U |
| 1.3.6.1.4.1.3854.1.2.2.1.15.1.3.{n} | Voltage value sensor n | V × 10 | $r / 10 | gauge,0:U |
| 1.3.6.1.4.1.3854.1.2.2.1.15.1.4.{n} | Voltage status sensor n | Enum 0/1/2 | – | gauge,0:U |
| 1.3.6.1.2.1.1.3.0 | System Uptime | Hundredths of a second | – | gauge,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.nmisAdd 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
- Navigation: System → System Configuration → Escalations.
- 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 Name | Warning | Major | Critical | Fatal | Standard |
|---|---|---|---|---|---|
| didactum_temp (°C) | 28 | 30 | 35 | 40 | ASHRAE A1: 15–32 °C |
| didactum_humidity (% rF) | 65 / <20 | 70 / <15 | 75 / <10 | 80 | ASHRAE: 20–80 % rF |
| didactum_leak | – | – | – | 1 | Immediate alarm |
| didactum_voltage (V) | 250 / <210 | – | 253 / <207 | 260 / <196 | EN 50160 ±10 % |
| didactum_door | – | 1 | – | – | Policy dependent |
| didactum_smoke | – | – | – | 1 | Immediate 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 OID | Event | NMIS Severity |
|---|---|---|
| 1.3.6.1.4.1.3854.1.7.1 | Temperature Alarm | Critical |
| 1.3.6.1.4.1.3854.1.7.2 | Leakage Alarm | Fatal |
| 1.3.6.1.4.1.3854.1.7.3 | Humidity Alarm | Major |
| 1.3.6.1.4.1.3854.1.7.4 | Voltage Alarm | Critical |
| 1.3.6.1.4.1.3854.1.7.10 | Door Contact Open | Major |
| 1.3.6.1.4.1.3854.1.7.14 | Smoke Detector Alarm | Fatal |
| 1.3.6.1.4.1.3854.1.7.99 | Device Restart | Warning |
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
- Open NMIS Web Interface.
- Navigation: Network → Node View → Select node didactum-rack01.
- Tab Health → All Didactum graphs are displayed.
- Time ranges: Daily graph (default), week, month, year.
- 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
- Navigation: Network → Network Health.
- Group filter: Didactum-Monitoring.
- Overview of all Didactum nodes with current status, last event and health score.
11.4 Reports from NMIS
- Navigation: System → Reports.
- Report type: Node Availability or Event Report.
- Filter: Group Didactum-Monitoring, period: Last month.
- Export as PDF or HTML for monthly evaluations.
12. Troubleshooting
| Problem | Possible Cause / Solution |
|---|---|
| Node shows "SNMP Down" event | Wrong 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 loaded | Syntax 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 appear | RRD 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 generated | Threshold 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 arrive | UDP 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 error | Check 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 time | Increase 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.nmis | Didactum Device Model: OIDs, graph types, threshold references |
| /usr/local/nmis8/models-custom/Common-database.nmis | RRD file paths for Didactum metrics |
| /usr/local/nmis8/models-custom/Common-heading.nmis | Readable graph headings |
| /usr/local/nmis8/models-custom/Common-stats.nmis | RRDtool statistics definitions |
| /usr/local/nmis8/models-custom/Common-threshold.nmis | Threshold definitions (warning to fatal) |
| /usr/local/nmis8/conf/Nodes.nmis | Node list (all monitored devices) |
| /usr/local/nmis8/conf/Contacts.nmis | Contact addresses for notifications |
| /usr/local/nmis8/conf/Escalations.nmis | Escalation rules for events |
| /usr/local/nmis8/database/nodes/didactum-rack01/ | RRD files of the Didactum node |
| /usr/local/nmis8/logs/nmis.log | NMIS main log |
| /usr/local/nmis8/logs/event.log | Event log (all alarms) |
For firmware-specific OIDs and supported sensor types, always consult the current Didactum device documentation. NMIS documentation: docs.community.firstwave.com.