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

Didactum Monitoring Devices and Sensors – Integration into OpenNMS

This guide describes the complete integration of Didactum monitoring devices into OpenNMS Horizon and OpenNMS Meridian. The objective is the centralized monitoring of all connected sensors - temperature, humidity, leakage, voltage, door contacts, and others - including alerting, trend graphs, and SNMP trap processing.

1. Fundamentals and Architecture

OpenNMS is an enterprise monitoring platform that, in addition to simple SNMP polling, also provides event correlation, alarm management, trend graphs (via RRDtool or Newts/Cassandra), and automatic network discovery. Integration of the Didactum device is carried out via SNMP polling and optional SNMP trap processing.

Processing workflow in OpenNMS

  1. Discovery: OpenNMS automatically detects the Didactum device in the network or it is imported manually as a requisition.
  2. Provisioning: The device is linked with SNMP parameters and monitoring policies.
  3. Polling: The poller queries OID values at configurable intervals and checks the device status.
  4. Data Collection: The collector stores measurement values in RRD files for trend graphs.
  5. Event Processing: SNMP traps and polling results are processed as events.
  6. Alerting: Events trigger alarms and notifications when required.

OpenNMS core components

ComponentFunctionConfiguration file
ProvisiondDevice import and management (requisitions)provisiond-configuration.xml
PollerdService availability pollingpoller-configuration.xml
CollectdSNMP data collection for graphscollectd-configuration.xml
TrapdSNMP trap reception and processingtrapd-configuration.xml
EventdEvent processing and correlationeventd-configuration.xml
NotifdNotifications (email, SMS, ticket)notifications.xml
RRDtool / NewtsTime series storage for measurement valuesrrd-configuration.properties

All configuration files are located by default under /etc/opennms/.

2. Prerequisites

OpenNMS Horizon 31.x or newer (or Meridian current version)

  • Linux server (Debian/Ubuntu or RHEL/CentOS) with root access
  • Java 11 or newer (OpenJDK recommended)
  • PostgreSQL 12 or newer as database
  • SNMP tools (snmp, snmpwalk) on the OpenNMS server
  • Didactum monitoring device reachable on the network, SNMP enabled
  • UDP port 161 (SNMP polling) and UDP port 162 (SNMP traps) open from the OpenNMS server to the Didactum device
  • OpenNMS web interface accessible (default: port 8980)

Example network configuration

DeviceIP addressRole
OpenNMS server192.168.1.40Monitoring server
Didactum Monitoring Unit192.168.1.100Monitored device (SNMP agent)

3. SNMP Preparation on the Didactum Device

3.1 Enable SNMP

  1. Open the Didactum web interface: 192.168.1.100, log in with the admin account.
  2. Navigation: Settings → Network → SNMP (or: Settings → Network → SNMP).
  3. Set the following parameters:
    • SNMP enabled: Yes
    • SNMP version: v2c (recommended) or v3
    • Community string: public (change in production)
    • SNMP port: 161
    • Allowed Managers: enter the IP of the OpenNMS server (192.168.1.40)
    • SNMP Trap Receiver: IP of the OpenNMS server, port 162
  4. Save the settings.

3.2 Test reachability from the OpenNMS server

# SNMP walk – list all Didactum OIDs:
snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854
 
# Query temperature sensor 1 directly:
snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1
 
# System description (basic test):
snmpget -v2c -c public 192.168.1.100 1.3.6.1.2.1.1.1.0

Important: 

Didactum returns temperature and voltage values with a factor of 10 (235 = 23.5°C). This is taken into account in the data collection configurations using an ifIndex multiplier or a JEXL formula.

4. Preparing OpenNMS

4.1 Install SNMP tools and MIB browser

# Debian / Ubuntu:
sudo apt install snmp snmp-mibs-downloader libsnmp-dev -y
 
# RHEL / CentOS / Rocky Linux:
sudo dnf install net-snmp net-snmp-utils -y

4.2 Integrate Didactum MIB file

# Copy MIB file to the OpenNMS MIB directory:
sudo cp DIDACTUM-RACKMONI2-MIB.mib /usr/share/opennms/share/mibs/
 
# Alternatively to the system SNMP directory:
sudo cp DIDACTUM-RACKMONI2-MIB.mib /usr/share/snmp/mibs/
 
# Compile MIB in OpenNMS (via web interface):
# Admin → Configure OpenNMS → Manage SNMP MIBs → Upload MIB

4.3 Use OpenNMS MIB compiler

  1. Open the OpenNMS web interface: 192.168.1.40/opennms.
  2. Navigation: Admin → Configure OpenNMS → Manage SNMP MIBs.
  3. Click Upload MIB, upload the Didactum MIB file.
  4. After successful upload: click Compile MIB.
  5. OpenNMS automatically generates event configurations from the trap definitions of the MIB.

5. Add Didactum Device as a Requisition

OpenNMS uses requisitions (provisioning groups) for structured device management. Devices are imported either via the web interface or via the REST API.

5.1 Create requisition via the web interface

  1. Navigation: Admin → Provisioning Requisitions → Add New Requisition.
  2. Requisition Name: Didactum-Monitoring
  3. Click Add Node:
    • Node Label: didactum-rack01
    • Foreign ID: didactum-rack01
  4. Add interface:
    • IP Address: 192.168.1.100
    • SNMP Primary: P (Primary)
    • Managed: M (Managed)
  5. Add services to the interface:
    • SNMP (for SNMP reachability check)
    • ICMP (for ping check)
  6. Node metadata (optional):
    • Category: Didactum, Rack-Monitoring, Server Room A
  7. Save the requisition and click Synchronize.

5.2 Create requisition via REST API

# Create requisition:
curl -u admin:admin -X POST \\
  -H "Content-Type: application/xml" \\
  -d '<model-import foreign-source="Didactum-Monitoring">
    <node foreign-id="didactum-rack01" node-label="didactum-rack01">
      <interface ip-addr="192.168.1.100" status="1" snmp-primary="P">
        <monitored-service service-name="SNMP"/>
        <monitored-service service-name="ICMP"/>
      </interface>
      <asset name="description" value="Didactum Rack Monitoring Unit II"/>
      <asset name="room" value="Server Room A"/>
      <category name="Didactum"/>
      <category name="Rack-Monitoring"/>
    </node>
  </model-import>' \\
  192.168.1.40/opennms/rest/requisitions
 
# Import requisition (trigger synchronization):
curl -u admin:admin -X PUT \\
  192.168.1.40/opennms/rest/requisitions/Didactum-Monitoring/import

6. SNMP configuration in OpenNMS

6.1 Configure SNMP community for the Didactum device

Via the web interface: Admin → Configure SNMP Community Names by IP.

  1. Enter IP address: 192.168.1.100
  2. Read Community: public (or custom community string)
  3. SNMP Version: v2c
  4. Port: 161
  5. Click Save.

Alternatively directly in the configuration file:

sudo nano /etc/opennms/snmp-config.xml
<?xml version="1.0"?>
<snmp-config retry="3" timeout="800" read-community="public"
             proxy-host="" version="v2c" port="161"
             max-vars-per-pdu="10" max-repetitions="2">
 
    <!-- Specific configuration for Didactum device -->
    <definition version="v2c" read-community="public" port="161">
        <specific>192.168.1.100</specific>
    </definition>
 
    <!-- For SNMP v3 (optional, increased security): -->
    <!--
    <definition version="v3" security-name="snmpv3user"
                auth-passphrase="AuthPasswort123"
                auth-protocol="SHA"
                priv-passphrase="PrivPasswort456"
                priv-protocol="AES">
        <specific>192.168.1.100</specific>
    </definition>
    -->
 
</snmp-config>
# Reload OpenNMS after configuration change:
sudo systemctl reload opennms
# or:
sudo /usr/share/opennms/bin/send-event.pl uei.opennms.org/internal/reloadDaemonConfig \\
  --parm 'daemonName Provisiond'

6.2 Verify SNMP reachability in OpenNMS

  1. Navigation: Admin → Configure OpenNMS → SNMP MIBs → Test SNMP Walk.
  2. Enter IP: 192.168.1.100, OID: 1.3.6.1.4.1.3854.
  3. Click Do Walk – all Didactum OIDs should appear.

7. Configure SNMP Data Collection

Data collection determines which OIDs OpenNMS collects at which interval and stores as time series data for graphs.

7.1 Create Didactum data collection group

sudo nano /etc/opennms/datacollection/didactum.xml
<?xml version="1.0"?>
<datacollection-config rrd-repository="/var/lib/opennms/rrd/snmp/">
 
  <snmp-collection name="default" snmpStorageFlag="select">
    <rrd step="300">
      <rra>RRA:AVERAGE:0.5:1:2016</rra>
      <rra>RRA:AVERAGE:0.5:12:1488</rra>
      <rra>RRA:AVERAGE:0.5:288:366</rra>
      <rra>RRA:MAX:0.5:288:366</rra>
      <rra>RRA:MIN:0.5:288:366</rra>
    </rrd>
 
    <include-collection dataCollectionGroup="Didactum"/>
  </snmp-collection>
 
  <!-- Didactum monitoring data collection group -->
  <group name="didactum-temperature" ifType="ignore">
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1" instance="0"
            alias="tempValue1" type="gauge"/>
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.16.1.3.2" instance="0"
            alias="tempValue2" type="gauge"/>
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.16.1.3.3" instance="0"
            alias="tempValue3" type="gauge"/>
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.16.1.4.1" instance="0"
            alias="tempStatus1" type="gauge"/>
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.16.1.4.2" instance="0"
            alias="tempStatus2" type="gauge"/>
  </group>
 
  <group name="didactum-humidity" ifType="ignore">
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.17.1.3.1" instance="0"
            alias="humValue1" type="gauge"/>
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.17.1.3.2" instance="0"
            alias="humValue2" type="gauge"/>
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.17.1.4.1" instance="0"
            alias="humStatus1" type="gauge"/>
  </group>
 
  <group name="didactum-leak" ifType="ignore">
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.18.1.4.1" instance="0"
            alias="leakStatus1" type="gauge"/>
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.18.1.4.2" instance="0"
            alias="leakStatus2" type="gauge"/>
  </group>
 
  <group name="didactum-voltage" ifType="ignore">
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.15.1.3.1" instance="0"
            alias="voltValue1" type="gauge"/>
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.15.1.4.1" instance="0"
            alias="voltStatus1" type="gauge"/>
  </group>
 
  <group name="didactum-door" ifType="ignore">
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.10.1.3.1" instance="0"
            alias="doorStatus1" type="gauge"/>
  </group>
 
  <group name="didactum-smoke" ifType="ignore">
    <mibObj oid=".1.3.6.1.4.1.3854.1.2.2.1.14.1.3.1" instance="0"
            alias="smokeStatus1" type="gauge"/>
  </group>
 
  <!-- Summary of all Didactum groups -->
  <datacollection-group name="Didactum">
    <include-group>didactum-temperature</include-group>
    <include-group>didactum-humidity</include-group>
    <include-group>didactum-leak</include-group>
    <include-group>didactum-voltage</include-group>
    <include-group>didactum-door</include-group>
    <include-group>didactum-smoke</include-group>
  </datacollection-group>
 
</datacollection-config>

7.2 Assign data collection to the device

Create a collection package rule for Didactum devices in /etc/opennms/collectd-configuration.xml:

sudo nano /etc/opennms/collectd-configuration.xml
<!-- Insert Didactum-specific collection package: -->
<package name="didactum">
    <filter>categoryName == 'Didactum'</filter>
    <include-range begin="192.168.1.100" end="192.168.1.110"/>
 
    <service name="SNMP" interval="300000" user-defined="false" status="on">
        <parameter key="collection" value="default"/>
        <parameter key="thresholding-enabled" value="true"/>
    </service>
</package>

7.3 Reload Collectd

sudo /usr/share/opennms/bin/send-event.pl \\
  uei.opennms.org/internal/reloadDaemonConfig \\
  --parm 'daemonName Collectd'

8. Event Configuration for Didactum

OpenNMS processes all state changes as events. For Didactum-specific events, a separate event configuration file is created.

8.1 Create Didactum events file

sudo nano /etc/opennms/events/didactum.events.xml
<?xml version="1.0"?>
<events xmlns="http://xmlns.opennms.org/xsd/eventconf">
 
  <!-- Temperature alarm -->
  <event>
    <uei>uei.didactum/trap/temperatureAlarm</uei>
    <event-label>Didactum: Temperature alarm</event-label>
    <descr>
      Temperature alarm triggered on device &lt;b&gt;%nodeid%&lt;/b&gt;.
      Sensor: %parm[#1]%. Current value: %parm[#2]%.
    </descr>
    <logmsg dest="logndisplay">
      Didactum temperature alarm: device %nodelabel% – sensor %parm[#1]%
    </logmsg>
    <severity>Major</severity>
    <alarm-data reduction-key="%uei%:%dpname%:%nodeid%:%parm[#1]%"
                alarm-type="1"
                auto-clean="false"/>
  </event>
 
  <!-- Leak alarm -->
  <event>
    <uei>uei.didactum/trap/leakAlarm</uei>
    <event-label>Didactum: Leak alarm</event-label>
    <descr>
      LEAK detected on device &lt;b&gt;%nodelabel%&lt;/b&gt;!
      Sensor: %parm[#1]%. Immediate action required!
    </descr>
    <logmsg dest="logndisplay">
      LEAK ALARM: device %nodelabel% – sensor %parm[#1]%
    </logmsg>
    <severity>Critical</severity>
    <alarm-data reduction-key="%uei%:%dpname%:%nodeid%:%parm[#1]%"
                alarm-type="1"
                auto-clean="false"/>
  </event>
 
  <!-- Humidity alarm -->
  <event>
    <uei>uei.didactum/trap/humidityAlarm</uei>
    <event-label>Didactum: Humidity alarm</event-label>
    <descr>
      Humidity alarm on device &lt;b&gt;%nodelabel%&lt;/b&gt;.
      Sensor: %parm[#1]%. Current value: %parm[#2]% %% RH.
    </descr>
    <logmsg dest="logndisplay">
      Didactum humidity alarm: %nodelabel% – %parm[#2]% %% RH
    </logmsg>
    <severity>Major</severity>
    <alarm-data reduction-key="%uei%:%dpname%:%nodeid%:%parm[#1]%"
                alarm-type="1"
                auto-clean="false"/>
  </event>
 
  <!-- Voltage alarm -->
  <event>
    <uei>uei.didactum/trap/voltageAlarm</uei>
    <event-label>Didactum: Voltage alarm</event-label>
    <descr>
      Voltage alarm on device &lt;b&gt;%nodelabel%&lt;/b&gt;.
      Current value: %parm[#2]%.
    </descr>
    <logmsg dest="logndisplay">
      Didactum voltage alarm: %nodelabel%
    </logmsg>
    <severity>Major</severity>
    <alarm-data reduction-key="%uei%:%dpname%:%nodeid%"
                alarm-type="1"
                auto-clean="false"/>
  </event>
 
  <!-- Door contact alarm -->
  <event>
    <uei>uei.didactum/trap/doorAlarm</uei>
    <event-label>Didactum: Door contact open</event-label>
    <descr>
      Door contact alarm on device &lt;b&gt;%nodelabel%&lt;/b&gt;.
      Sensor: %parm[#1]%.
    </descr>
    <logmsg dest="logndisplay">
      Didactum door contact open: %nodelabel% – sensor %parm[#1]%
    </logmsg>
    <severity>Warning</severity>
    <alarm-data reduction-key="%uei%:%dpname%:%nodeid%:%parm[#1]%"
                alarm-type="1"
                auto-clean="false"/>
  </event>
 
  <!-- Device reboot -->
  <event>
    <uei>uei.didactum/trap/deviceReboot</uei>
    <event-label>Didactum: Device rebooted</event-label>
    <descr>The Didactum device %nodelabel% has been rebooted.</descr>
    <logmsg dest="logndisplay">
      Didactum reboot: %nodelabel%
    </logmsg>
    <severity>Warning</severity>
  </event>
 
</events>

8.2 Register events file in OpenNMS

sudo nano /etc/opennms/eventconf.xml

Add the following entry before the closing </events> tag:

<event-file>events/didactum.events.xml</event-file>
# Reload Eventd:
sudo /usr/share/opennms/bin/send-event.pl \\
  uei.opennms.org/internal/reloadDaemonConfig \\
  --parm 'daemonName Eventd'

9. SNMP-Trap-Integration

SNMP traps allow the Didactum device to immediately send a notification to OpenNMS in case of alarms – without active polling. OpenNMS receives traps via the Trapd service on UDP port 162.

9.1 Configure Trapd

sudo nano /etc/opennms/trapd-configuration.xml
<?xml version="1.0"?>
<trapd-configuration
    snmp-trap-port="162"
    new-suspect-on-trap="true"
    include-raw-message="false"
    threads="2"
    queue-size="10000"
    batch-size="1000"
    batch-interval="500"/>

9.2 Trap-to-event mapping for Didactum

The mapping of Didactum trap OIDs to OpenNMS events is done in the events configuration. Add the following section to /etc/opennms/events/didactum.events.xml:

  <!-- SNMP trap mapping: temperature alarm trap OID 1.3.6.1.4.1.3854.1.7.1 -->
  <event>
    <uei>uei.didactum/trap/temperatureAlarm</uei>
    <event-label>Didactum: Temperature alarm trap</event-label>
    <mask>
      <maskelement>
        <mename>id</mename>
        <mevalue>.1.3.6.1.4.1.3854</mevalue>
      </maskelement>
      <maskelement>
        <mename>generic</mename>
        <mevalue>6</mevalue>
      </maskelement>
      <maskelement>
        <mename>specific</mename>
        <mevalue>1</mevalue>
      </maskelement>
    </mask>
    <descr>Temperature alarm trap from Didactum device %nodelabel%</descr>
    <logmsg dest="logndisplay">Didactum temp alarm: %nodelabel%</logmsg>
    <severity>Major</severity>
    <alarm-data reduction-key="%uei%:%nodeid%" alarm-type="1"/>
  </event>
 
  <!-- SNMP trap mapping: leak alarm trap OID 1.3.6.1.4.1.3854.1.7.2 -->
  <event>
    <uei>uei.didactum/trap/leakAlarm</uei>
    <event-label>Didactum: Leak alarm trap</event-label>
    <mask>
      <maskelement>
        <mename>id</mename>
        <mevalue>.1.3.6.1.4.1.3854</mevalue>
      </maskelement>
      <maskelement>
        <mename>generic</mename>
        <mevalue>6</mevalue>
      </maskelement>
      <maskelement>
        <mename>specific</mename>
        <mevalue>2</mevalue>
      </maskelement>
    </mask>
    <descr>LEAK ALARM from Didactum device %nodelabel%! Immediate action required!</descr>
    <logmsg dest="logndisplay">LEAK ALARM: %nodelabel%</logmsg>
    <severity>Critical</severity>
    <alarm-data reduction-key="%uei%:%nodeid%" alarm-type="1"/>
  </event>

9.3 Important Didactum trap OIDs

Trap OIDEventSpecific valueOpenNMS severity
1.3.6.1.4.1.3854.1.7.1Temperature alarm1Major
1.3.6.1.4.1.3854.1.7.2Leak alarm2Critical
1.3.6.1.4.1.3854.1.7.3Humidity alarm3Major
1.3.6.1.4.1.3854.1.7.4Voltage alarm4Major
1.3.6.1.4.1.3854.1.7.10Door contact open10Warning
1.3.6.1.4.1.3854.1.7.14Smoke detector alarm14Critical
1.3.6.1.4.1.3854.1.7.99Device reboot99Warning

9.4 Reload Trapd and test

# Reload Trapd:
sudo /usr/share/opennms/bin/send-event.pl \\
  uei.opennms.org/internal/reloadDaemonConfig \\
  --parm 'daemonName Trapd'
 
# Send test trap from the Didactum device to OpenNMS (simulated):
snmptrap -v2c -c public 192.168.1.40 '' \\
  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 OpenNMS event log for incoming traps:
sudo tail -f /var/log/opennms/trapd.log

10. Alarms and Notifications

10.1 Configure threshold-based alerting

OpenNMS can check collected SNMP values against thresholds and automatically generate events when limits are exceeded.

sudo nano /etc/opennms/thresholds.xml
<?xml version="1.0"?>
<thresholding-config>
 
  <group name="didactum" rrdRepository="/var/lib/opennms/rrd/snmp/">
 
    <!-- Temperature sensor 1: warning at 30 °C (300), critical at 35 °C (350) -->
    <threshold type="high"
               ds-name="tempValue1"
               ds-type="node"
               value="300"
               rearm="280"
               trigger="2"
               description="Temperature sensor 1 too high">
      <resource-filter field="ifIndex">.*</resource-filter>
    </threshold>
 
    <threshold type="high"
               ds-name="tempValue1"
               ds-type="node"
               value="350"
               rearm="320"
               trigger="1"
               description="Temperature sensor 1 critical"
               triggeredUEI="uei.didactum/trap/temperatureAlarm">
    </threshold>
 
    <!-- Leak sensor 1: immediate alarm for value > 0 -->
    <threshold type="high"
               ds-name="leakStatus1"
               ds-type="node"
               value="0.5"
               rearm="0"
               trigger="1"
               description="Leak sensor 1 triggered"
               triggeredUEI="uei.didactum/trap/leakAlarm">
    </threshold>
 
    <!-- Humidity sensor 1: warning at 70 %, critical at 80 % -->
    <threshold type="high"
               ds-name="humValue1"
               ds-type="node"
               value="70"
               rearm="65"
               trigger="2"
               description="Humidity sensor 1 too high">
    </threshold>
 
    <threshold type="low"
               ds-name="humValue1"
               ds-type="node"
               value="20"
               rearm="25"
               trigger="2"
               description="Humidity sensor 1 too low">
    </threshold>
 
    <!-- Voltage sensor 1: warning outside 207–253 V (2070–2530 × 10) -->
    <threshold type="high"
               ds-name="voltValue1"
               ds-type="node"
               value="2530"
               rearm="2500"
               trigger="2"
               description="Voltage sensor 1 too high (above 253 V)">
    </threshold>
 
    <threshold type="low"
               ds-name="voltValue1"
               ds-type="node"
               value="2070"
               rearm="2100"
               trigger="2"
               description="Voltage sensor 1 too low (below 207 V)">
    </threshold>
 
  </group>
 
</thresholding-config>

10.2 Assign threshold group to the collection package

Add the following to the Didactum package in /etc/opennms/collectd-configuration.xml:

<service name="SNMP" interval="300000" user-defined="false" status="on">
    <parameter key="collection" value="default"/>
    <parameter key="thresholding-enabled" value="true"/>
    <parameter key="thresholding-group" value="didactum"/>
</service>

10.3 Configure email notification

  1. Navigation: Admin → Configure Notifications → New Notification.
  2. Event filter: Events matching UEI containing 'didactum'
  3. Destination path: select existing path or create a new one.
  4. Configure destination path (Admin → Configure Notifications → Destination Paths):
    • Step 1: Email to admin@example.com – immediately (0 minutes)
    • Step 2 (escalation): Email to leitung@example.com – after 15 minutes without acknowledgment

10.4 Recommended threshold settings

Sensor typeds-nameWarning valueCritical valueRearm value
Temperature IT rack (× 10)tempValue1300 (30 °C)350 (35 °C)280 (28 °C)
Temperature UPS room (× 10)tempValue2250 (25 °C)300 (30 °C)230 (23 °C)
HumidityhumValue170 % RH80 % RH65 % RH
LeakleakStatus10.5 (value > 0)0
Voltage high (× 10)voltValue12530 (253 V)2600 (260 V)2500 (250 V)
Voltage low (× 10)voltValue12070 (207 V)1960 (196 V)2100 (210 V)

11. OID Reference for OpenNMS

All OIDs are based on the Didactum enterprise OID base 1.3.6.1.4.1.3854. The placeholder {n} represents the sensor index (1 = first sensor, etc.).

11.1 Temperature sensors

OIDDescriptionUnitalias (datacollection.xml)OpenNMS note
1.3.6.1.4.1.3854.1.2.2.1.16.1.3.{n}Temperature value sensor n°C × 10tempValue{n}Threshold × 10; adjust graph label
1.3.6.1.4.1.3854.1.2.2.1.16.1.4.{n}Temperature status sensor nEnum 0/1/2tempStatus{n}For threshold trigger events
1.3.6.1.4.1.3854.1.2.2.1.16.1.7.{n}Upper limit sensor n°C × 10tempHiLimit{n}Informational; as HRULE in graphs
1.3.6.1.4.1.3854.1.2.2.1.16.1.8.{n}Lower limit sensor n°C × 10tempLoLimit{n}Informational; as HRULE in graphs
1.3.6.1.4.1.3854.1.2.2.1.16.1.2.{n}Sensor name nTextFor labeling in reports

11.2 Leak sensors

OIDDescriptionUnitaliasOpenNMS note
1.3.6.1.4.1.3854.1.2.2.1.18.1.4.{n}Leak status sensor n0=OK, 1=alarmleakStatus{n}Threshold at 0.5; critical severity
1.3.6.1.4.1.3854.1.2.2.1.18.1.3.{n}Leak value sensor n0=dryleakValue{n}Alternative to status OID
1.3.6.1.4.1.3854.1.2.2.1.18.1.2.{n}Sensor name nTextFor labeling

11.3 Humidity sensors

OIDDescriptionUnitaliasOpenNMS note
1.3.6.1.4.1.3854.1.2.2.1.17.1.3.{n}Humidity value sensor n% RHhumValue{n}No factor required
1.3.6.1.4.1.3854.1.2.2.1.17.1.4.{n}Humidity status nEnum 0/1/2humStatus{n}For threshold triggers
1.3.6.1.4.1.3854.1.2.2.1.17.1.7.{n}Upper limit sensor n% RHhumHiLimit{n}Informational
1.3.6.1.4.1.3854.1.2.2.1.17.1.8.{n}Lower limit sensor n% RHhumLoLimit{n}Informational

11.4 Other sensors

OIDDescriptionUnitaliasOpenNMS note
1.3.6.1.4.1.3854.1.2.2.1.15.1.3.{n}Voltage value sensor nV × 10voltValue{n}Threshold × 10 (207 V = 2070)
1.3.6.1.4.1.3854.1.2.2.1.15.1.4.{n}Voltage status sensor nEnum 0/1/2voltStatus{n}For threshold triggers
1.3.6.1.4.1.3854.1.2.2.1.10.1.3.{n}Door contact status n0=closed, 1=opendoorStatus{n}Threshold at 0.5; warning severity
1.3.6.1.4.1.3854.1.2.2.1.11.1.3.{n}Vibration / movement n0=none, 1=alarmvibStatus{n}Threshold at 0.5
1.3.6.1.4.1.3854.1.2.2.1.14.1.3.{n}Smoke detector status n0=OK, 1=alarmsmokeStatus{n}Threshold at 0.5; critical severity
1.3.6.1.2.1.1.3.0System uptime (sysUpTime)Hundredths of secondssysUpTimeStandard MIB, always available

12. Troubleshooting

ProblemPossible cause / solution
Device does not appear in OpenNMS after importCheck Provisiond log: tail -f /var/log/opennms/provisiond.log. Manually synchronize requisition: Admin → Provisioning Requisitions → Synchronize.
SNMP status on the node shows an errorCheck community string in snmp-config.xml. Test: snmpwalk -v2c -c public 192.168.1.100. Check firewall UDP 161.
No measurement data / graphs emptyCheck Collectd log: tail -f /var/log/opennms/collectd.log. Is the data collection group correctly referenced? Is thresholding enabled? Is the RRD directory writable?
Temperature raw value × 10 in graphsAdd a formula in the graph definition that divides the value by 10. Alternatively, clearly indicate in the label that the value is displayed × 10.
Traps are not receivedOpen UDP port 162 on the OpenNMS server in the firewall. Is the Trapd service running? Is the correct IP configured as trap receiver in the Didactum device?
Events are not turned into alarmsIs the alarm-data block present in the event definition? Is the reduction-key set correctly? Check Eventd log: tail -f /var/log/opennms/eventd.log.
No notifications on alarmCheck notification configuration. Is the destination path active? Are email settings correct? Notifd log: tail -f /var/log/opennms/notifd.log.
XML configuration is not appliedCheck XML for syntax errors: xmllint --noout /etc/opennms/events/didactum.events.xml. Send daemon reload or restart OpenNMS: sudo systemctl restart opennms.

Overview of Diagnostic Commands

# Test SNMP reachability:
snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854
 
# Query a single sensor:
snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1
 
# Check XML syntax:
xmllint --noout /etc/opennms/events/didactum.events.xml
xmllint --noout /etc/opennms/datacollection/didactum.xml
 
# Restart OpenNMS service:
sudo systemctl restart opennms
 
# Reload individual daemons (without restart):
sudo /usr/share/opennms/bin/send-event.pl \
  uei.opennms.org/internal/reloadDaemonConfig \
  --parm 'daemonName Collectd'
 
sudo /usr/share/opennms/bin/send-event.pl \
  uei.opennms.org/internal/reloadDaemonConfig \
  --parm 'daemonName Eventd'
 
sudo /usr/share/opennms/bin/send-event.pl \
  uei.opennms.org/internal/reloadDaemonConfig \
  --parm 'daemonName Trapd'
 
# Follow logs in real time:
sudo tail -f /var/log/opennms/opennms.log
sudo tail -f /var/log/opennms/collectd.log
sudo tail -f /var/log/opennms/provisiond.log
sudo tail -f /var/log/opennms/trapd.log
sudo tail -f /var/log/opennms/eventd.log
 
# Send test trap (simulate leak):
snmptrap -v2c -c public 192.168.1.40 '' \
  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 RRD data:
rrdtool lastupdate /var/lib/opennms/rrd/snmp/1/didactum-temperature.jrb
 
# Query requisition status via REST API:
curl -u admin:admin \
  192.168.1.40/opennms/rest/requisitions/Didactum-Monitoring

Configuration Files Quick Reference

FilePathPurpose
snmp-config.xml/etc/opennms/SNMP community and version per IP
didactum.xml/etc/opennms/datacollection/SNMP data collection (OIDs, RRD types)
collectd-configuration.xml/etc/opennms/Collection packages and intervals
didactum.events.xml/etc/opennms/events/Event definitions and trap mapping
eventconf.xml/etc/opennms/Registration of the events file
thresholds.xml/etc/opennms/Thresholds for alerting
trapd-configuration.xml/etc/opennms/SNMP trap receiver configuration
notifications.xml/etc/opennms/Notification rules

For firmware-specific OIDs and supported sensor types, always consult the current Didactum device documentation.

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.