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
- Discovery: OpenNMS automatically detects the Didactum device in the network or it is imported manually as a requisition.
- Provisioning: The device is linked with SNMP parameters and monitoring policies.
- Polling: The poller queries OID values at configurable intervals and checks the device status.
- Data Collection: The collector stores measurement values in RRD files for trend graphs.
- Event Processing: SNMP traps and polling results are processed as events.
- Alerting: Events trigger alarms and notifications when required.
OpenNMS core components
| Component | Function | Configuration file |
|---|---|---|
| Provisiond | Device import and management (requisitions) | provisiond-configuration.xml |
| Pollerd | Service availability polling | poller-configuration.xml |
| Collectd | SNMP data collection for graphs | collectd-configuration.xml |
| Trapd | SNMP trap reception and processing | trapd-configuration.xml |
| Eventd | Event processing and correlation | eventd-configuration.xml |
| Notifd | Notifications (email, SMS, ticket) | notifications.xml |
| RRDtool / Newts | Time series storage for measurement values | rrd-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
| Device | IP address | Role |
|---|---|---|
| OpenNMS server | 192.168.1.40 | Monitoring server |
| Didactum Monitoring Unit | 192.168.1.100 | Monitored device (SNMP agent) |
3. SNMP Preparation on the Didactum Device
3.1 Enable SNMP
- Open the Didactum web interface: 192.168.1.100, log in with the admin account.
- Navigation: Settings → Network → SNMP (or: Settings → Network → SNMP).
- 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
- 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
- Open the OpenNMS web interface: 192.168.1.40/opennms.
- Navigation: Admin → Configure OpenNMS → Manage SNMP MIBs.
- Click Upload MIB, upload the Didactum MIB file.
- After successful upload: click Compile MIB.
- 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
- Navigation: Admin → Provisioning Requisitions → Add New Requisition.
- Requisition Name: Didactum-Monitoring
- Click Add Node:
- Node Label: didactum-rack01
- Foreign ID: didactum-rack01
- Add interface:
- IP Address: 192.168.1.100
- SNMP Primary: P (Primary)
- Managed: M (Managed)
- Add services to the interface:
- SNMP (for SNMP reachability check)
- ICMP (for ping check)
- Node metadata (optional):
- Category: Didactum, Rack-Monitoring, Server Room A
- 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.
- Enter IP address: 192.168.1.100
- Read Community: public (or custom community string)
- SNMP Version: v2c
- Port: 161
- 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
- Navigation: Admin → Configure OpenNMS → SNMP MIBs → Test SNMP Walk.
- Enter IP: 192.168.1.100, OID: 1.3.6.1.4.1.3854.
- 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 <b>%nodeid%</b>.
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 <b>%nodelabel%</b>!
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 <b>%nodelabel%</b>.
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 <b>%nodelabel%</b>.
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 <b>%nodelabel%</b>.
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 OID | Event | Specific value | OpenNMS severity |
|---|---|---|---|
| 1.3.6.1.4.1.3854.1.7.1 | Temperature alarm | 1 | Major |
| 1.3.6.1.4.1.3854.1.7.2 | Leak alarm | 2 | Critical |
| 1.3.6.1.4.1.3854.1.7.3 | Humidity alarm | 3 | Major |
| 1.3.6.1.4.1.3854.1.7.4 | Voltage alarm | 4 | Major |
| 1.3.6.1.4.1.3854.1.7.10 | Door contact open | 10 | Warning |
| 1.3.6.1.4.1.3854.1.7.14 | Smoke detector alarm | 14 | Critical |
| 1.3.6.1.4.1.3854.1.7.99 | Device reboot | 99 | Warning |
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
- Navigation: Admin → Configure Notifications → New Notification.
- Event filter: Events matching UEI containing 'didactum'
- Destination path: select existing path or create a new one.
- 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 type | ds-name | Warning value | Critical value | Rearm value |
|---|---|---|---|---|
| Temperature IT rack (× 10) | tempValue1 | 300 (30 °C) | 350 (35 °C) | 280 (28 °C) |
| Temperature UPS room (× 10) | tempValue2 | 250 (25 °C) | 300 (30 °C) | 230 (23 °C) |
| Humidity | humValue1 | 70 % RH | 80 % RH | 65 % RH |
| Leak | leakStatus1 | – | 0.5 (value > 0) | 0 |
| Voltage high (× 10) | voltValue1 | 2530 (253 V) | 2600 (260 V) | 2500 (250 V) |
| Voltage low (× 10) | voltValue1 | 2070 (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
| OID | Description | Unit | alias (datacollection.xml) | OpenNMS note |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.{n} | Temperature value sensor n | °C × 10 | tempValue{n} | Threshold × 10; adjust graph label |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.4.{n} | Temperature status sensor n | Enum 0/1/2 | tempStatus{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 × 10 | tempHiLimit{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 × 10 | tempLoLimit{n} | Informational; as HRULE in graphs |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.2.{n} | Sensor name n | Text | – | For labeling in reports |
11.2 Leak sensors
| OID | Description | Unit | alias | OpenNMS note |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.18.1.4.{n} | Leak status sensor n | 0=OK, 1=alarm | leakStatus{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 n | 0=dry | leakValue{n} | Alternative to status OID |
| 1.3.6.1.4.1.3854.1.2.2.1.18.1.2.{n} | Sensor name n | Text | – | For labeling |
11.3 Humidity sensors
| OID | Description | Unit | alias | OpenNMS note |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.3.{n} | Humidity value sensor n | % RH | humValue{n} | No factor required |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.4.{n} | Humidity status n | Enum 0/1/2 | humStatus{n} | For threshold triggers |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.7.{n} | Upper limit sensor n | % RH | humHiLimit{n} | Informational |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.8.{n} | Lower limit sensor n | % RH | humLoLimit{n} | Informational |
11.4 Other sensors
| OID | Description | Unit | alias | OpenNMS note |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.15.1.3.{n} | Voltage value sensor n | V × 10 | voltValue{n} | Threshold × 10 (207 V = 2070) |
| 1.3.6.1.4.1.3854.1.2.2.1.15.1.4.{n} | Voltage status sensor n | Enum 0/1/2 | voltStatus{n} | For threshold triggers |
| 1.3.6.1.4.1.3854.1.2.2.1.10.1.3.{n} | Door contact status n | 0=closed, 1=open | doorStatus{n} | Threshold at 0.5; warning severity |
| 1.3.6.1.4.1.3854.1.2.2.1.11.1.3.{n} | Vibration / movement n | 0=none, 1=alarm | vibStatus{n} | Threshold at 0.5 |
| 1.3.6.1.4.1.3854.1.2.2.1.14.1.3.{n} | Smoke detector status n | 0=OK, 1=alarm | smokeStatus{n} | Threshold at 0.5; critical severity |
| 1.3.6.1.2.1.1.3.0 | System uptime (sysUpTime) | Hundredths of seconds | sysUpTime | Standard MIB, always available |
12. Troubleshooting
| Problem | Possible cause / solution |
|---|---|
| Device does not appear in OpenNMS after import | Check Provisiond log: tail -f /var/log/opennms/provisiond.log. Manually synchronize requisition: Admin → Provisioning Requisitions → Synchronize. |
| SNMP status on the node shows an error | Check community string in snmp-config.xml. Test: snmpwalk -v2c -c public 192.168.1.100. Check firewall UDP 161. |
| No measurement data / graphs empty | Check 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 graphs | Add 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 received | Open 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 alarms | Is 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 alarm | Check notification configuration. Is the destination path active? Are email settings correct? Notifd log: tail -f /var/log/opennms/notifd.log. |
| XML configuration is not applied | Check 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
| File | Path | Purpose |
|---|---|---|
| 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.