Didactum Monitoring-Geräte und Sensoren – Integration in OpenNMS
Diese Anleitung beschreibt die vollständige Integration von Didactum Monitoring-Geräten in OpenNMS Horizon und OpenNMS Meridian. Ziel ist die zentrale Überwachung aller angeschlossenen Sensoren – Temperatur, Luftfeuchtigkeit, Leckage, Spannung, Türkontakte und weitere – inklusive Alarmierung, Trendgrafiken und SNMP-Trap-Verarbeitung.
1. Grundlagen und Architektur
OpenNMS ist eine Enterprise-Monitoring-Plattform, die neben einfachem SNMP-Polling auch Event-Korrelation, Alarmmanagement, Trendgrafiken (via RRDtool oder Newts/Cassandra) und automatische Netzwerkerkennung bietet. Die Integration des Didactum-Geräts erfolgt über SNMP-Polling und optionale SNMP-Trap-Verarbeitung.
Verarbeitungsablauf in OpenNMS
- Discovery: OpenNMS erkennt das Didactum-Gerät im Netzwerk automatisch oder es wird manuell als Requisition importiert.
- Provisioning: Das Gerät wird mit SNMP-Parametern und Monitoring-Policies verknüpft.
- Polling: Der Poller fragt in konfigurierbaren Intervallen OID-Werte ab und prüft den Gerätestatus.
- Data Collection: Der Collector speichert Messwerte in RRD-Dateien für Trendgrafiken.
- Event Processing: SNMP-Traps und Polling-Ergebnisse werden als Events verarbeitet.
- Alarmierung: Events lösen bei Bedarf Alarme und Benachrichtigungen aus.
OpenNMS-Kernkomponenten
| Komponente | Funktion | Konfigurationsdatei |
|---|---|---|
| Provisiond | Geräteimport und -verwaltung (Requisitions) | provisiond-configuration.xml |
| Pollerd | Verfügbarkeits-Polling der Services | poller-configuration.xml |
| Collectd | SNMP-Datensammlung für Grafiken | collectd-configuration.xml |
| Trapd | SNMP-Trap-Empfang und -Verarbeitung | trapd-configuration.xml |
| Eventd | Event-Verarbeitung und -Korrelation | eventd-configuration.xml |
| Notifd | Benachrichtigungen (E-Mail, SMS, Ticket) | notifications.xml |
| RRDtool / Newts | Zeitreihenspeicherung für Messwerte | rrd-configuration.properties |
Alle Konfigurationsdateien liegen standardmäßig unter /etc/opennms/.
2. Voraussetzungen
- OpenNMS Horizon 31.x oder neuer (oder Meridian aktuelle Version)
- Linux-Server (Debian/Ubuntu oder RHEL/CentOS) mit Root-Zugriff
- Java 11 oder neuer (OpenJDK empfohlen)
- PostgreSQL 12 oder neuer als Datenbank
- SNMP-Tools (snmp, snmpwalk) auf dem OpenNMS-Server
- Didactum Monitoring-Gerät im Netzwerk erreichbar, SNMP aktiviert
- UDP Port 161 (SNMP-Polling) und UDP Port 162 (SNMP-Traps) vom OpenNMS-Server zum Didactum-Gerät freigegeben
- OpenNMS-Web-Interface erreichbar (Standard: Port 8980)
Beispiel-Netzwerkkonfiguration
| Gerät | IP-Adresse | Rolle |
|---|---|---|
| OpenNMS-Server | 192.168.1.40 | Monitoring-Server |
| Didactum Monitoring Unit | 192.168.1.100 | Überwachtes Gerät (SNMP-Agent) |
3. SNMP-Vorbereitung am Didactum-Gerät
3.1 SNMP aktivieren
- Didactum Web-Interface aufrufen: 192.168.1.100, Login mit Admin-Konto.
- Navigation: Einstellungen → Netzwerk → SNMP (oder: Settings → Network → SNMP).
- Folgende Parameter setzen:
- SNMP aktiviert: Ja
- SNMP-Version: v2c (empfohlen) oder v3
- Community-String: public (in Produktion ändern)
- SNMP-Port: 161
- Allowed Managers: IP des OpenNMS-Servers (192.168.1.40) eintragen
- SNMP Trap Receiver: IP des OpenNMS-Servers, Port 162
- Einstellungen speichern.
3.2 Erreichbarkeit vom OpenNMS-Server testen
# SNMP Walk – alle Didactum-OIDs auflisten: snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854 # Temperatur Sensor 1 direkt abfragen: snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1 # System-Beschreibung (Grundtest): snmpget -v2c -c public 192.168.1.100 1.3.6.1.2.1.1.1.0
Wichtig:
Didactum gibt Temperatur- und Spannungswerte mit Faktor 10 zurück (235 = 23,5 °C). Dies wird in den Data-Collection-Konfigurationen über einen ifIndex-Multiplikator oder eine JEXL-Formel berücksichtigt.
4. OpenNMS vorbereiten
4.1 SNMP-Tools und MIB-Browser installieren
# 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 Didactum MIB-Datei einbinden
# MIB-Datei ins OpenNMS-MIB-Verzeichnis kopieren: sudo cp DIDACTUM-RACKMONI2-MIB.mib /usr/share/opennms/share/mibs/ # Alternativ ins System-SNMP-Verzeichnis: sudo cp DIDACTUM-RACKMONI2-MIB.mib /usr/share/snmp/mibs/ # MIB in OpenNMS compilieren (über Web-Interface): # Admin → Configure OpenNMS → Manage SNMP MIBs → Upload MIB
4.3 OpenNMS MIB-Compiler verwenden
- OpenNMS Web-Interface aufrufen: 192.168.1.40/opennms.
- Navigation: Admin → Configure OpenNMS → Manage SNMP MIBs.
- Klick auf Upload MIB, Didactum-MIB-Datei hochladen.
- Nach erfolgreichem Upload: Compile MIB klicken.
- OpenNMS generiert automatisch Event-Konfigurationen aus den Trap-Definitionen der MIB.
5. Didactum-Gerät als Requisition hinzufügen
OpenNMS verwendet Requisitions (Bereitstellungsgruppen) für die strukturierte Geräteverwaltung. Geräte werden entweder über das Web-Interface oder per REST-API importiert.
5.1 Requisition über das Web-Interface anlegen
- Navigation: Admin → Provisioning Requisitions → Add New Requisition.
- Requisition Name: Didactum-Monitoring
- Klick auf Add Node:
- Node Label: didactum-rack01
- Foreign ID: didactum-rack01
- Interface hinzufügen:
- IP Address: 192.168.1.100
- SNMP Primary: P (Primary)
- Managed: M (Managed)
- Services am Interface hinzufügen:
- SNMP (für SNMP-Erreichbarkeitscheck)
- ICMP (für Ping-Check)
- Node-Metadaten (optional):
- Category: Didactum, Rack-Monitoring, Serverraum-A
- Requisition speichern und Synchronize klicken.
5.2 Requisition per REST-API anlegen
# Requisition anlegen:
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="Serverraum A"/>
<category name="Didactum"/>
<category name="Rack-Monitoring"/>
</node>
</model-import>' \
192.168.1.40/opennms/rest/requisitions
# Requisition importieren (Synchronisierung anstoßen):
curl -u admin:admin -X PUT \
192.168.1.40/opennms/rest/requisitions/Didactum-Monitoring/import
6. SNMP-Konfiguration in OpenNMS
6.1 SNMP-Community für das Didactum-Gerät konfigurieren
Über das Web-Interface: Admin → Configure SNMP Community Names by IP.
- IP-Adresse eintragen: 192.168.1.100
- Read Community: public (oder eigener Community-String)
- SNMP Version: v2c
- Port: 161
- Klick auf Save.
Alternativ direkt in der Konfigurationsdatei:
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">
<!-- Spezifische Konfiguration für Didactum-Gerät -->
<definition version="v2c" read-community="public" port="161">
<specific>192.168.1.100</specific>
</definition>
<!-- Für SNMP v3 (Optional, erhöhte Sicherheit): -->
<!--
<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># OpenNMS nach Konfigurationsänderung neu laden: sudo systemctl reload opennms # oder: sudo /usr/share/opennms/bin/send-event.pl uei.opennms.org/internal/reloadDaemonConfig \ --parm 'daemonName Provisiond'
6.2 SNMP-Erreichbarkeit in OpenNMS prüfen
- Navigation: Admin → Configure OpenNMS → SNMP MIBs → Test SNMP Walk.
- IP: 192.168.1.100, OID: 1.3.6.1.4.1.3854 eintragen.
- Klick auf Do Walk – alle Didactum-OIDs sollten erscheinen.
7. SNMP Data Collection konfigurieren
Die Data Collection bestimmt, welche OIDs OpenNMS in welchem Intervall erfasst und als Zeitreihendaten für Grafiken speichert.
7.1 Didactum Data Collection Group erstellen
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>
<!-- Zusammenfassung aller Didactum-Gruppen -->
<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 Data Collection dem Gerät zuweisen
In /etc/opennms/collectd-configuration.xml eine Collection-Package-Regel für Didactum-Geräte anlegen:
sudo nano /etc/opennms/collectd-configuration.xml
<!-- Didactum-spezifisches Collection-Package einfügen: -->
<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 Collectd neu laden
sudo /usr/share/opennms/bin/send-event.pl \ uei.opennms.org/internal/reloadDaemonConfig \ --parm 'daemonName Collectd'
8. Event-Konfiguration für Didactum
OpenNMS verarbeitet alle Zustandsänderungen als Events. Für Didactum-spezifische Ereignisse wird eine eigene Event-Konfigurationsdatei angelegt.
8.1 Didactum Events-Datei erstellen
sudo nano /etc/opennms/events/didactum.events.xml
<?xml version="1.0"?>
<events xmlns="http://xmlns.opennms.org/xsd/eventconf">
<!-- Temperatur-Alarm -->
<event>
<uei>uei.didactum/trap/temperatureAlarm</uei>
<event-label>Didactum: Temperatur-Alarm</event-label>
<descr>
Temperatur-Alarm ausgelöst auf Gerät <b>%nodeid%</b>.
Sensor: %parm[#1]%. Aktueller Wert: %parm[#2]%.
</descr>
<logmsg dest="logndisplay">
Didactum Temperatur-Alarm: Gerät %nodelabel% – Sensor %parm[#1]%
</logmsg>
<severity>Major</severity>
<alarm-data reduction-key="%uei%:%dpname%:%nodeid%:%parm[#1]%"
alarm-type="1"
auto-clean="false"/>
</event>
<!-- Leckage-Alarm -->
<event>
<uei>uei.didactum/trap/leakAlarm</uei>
<event-label>Didactum: Leckage-Alarm</event-label>
<descr>
LECKAGE erkannt auf Gerät <b>%nodelabel%</b>!
Sensor: %parm[#1]%. Sofortiger Handlungsbedarf!
</descr>
<logmsg dest="logndisplay">
LECKAGE ALARM: Gerät %nodelabel% – Sensor %parm[#1]%
</logmsg>
<severity>Critical</severity>
<alarm-data reduction-key="%uei%:%dpname%:%nodeid%:%parm[#1]%"
alarm-type="1"
auto-clean="false"/>
</event>
<!-- Luftfeuchtigkeits-Alarm -->
<event>
<uei>uei.didactum/trap/humidityAlarm</uei>
<event-label>Didactum: Luftfeuchtigkeits-Alarm</event-label>
<descr>
Luftfeuchtigkeits-Alarm auf Gerät <b>%nodelabel%</b>.
Sensor: %parm[#1]%. Aktueller Wert: %parm[#2]% %% rF.
</descr>
<logmsg dest="logndisplay">
Didactum Luftfeuchtigkeits-Alarm: %nodelabel% – %parm[#2]% %% rF
</logmsg>
<severity>Major</severity>
<alarm-data reduction-key="%uei%:%dpname%:%nodeid%:%parm[#1]%"
alarm-type="1"
auto-clean="false"/>
</event>
<!-- Spannungs-Alarm -->
<event>
<uei>uei.didactum/trap/voltageAlarm</uei>
<event-label>Didactum: Spannungs-Alarm</event-label>
<descr>
Spannungs-Alarm auf Gerät <b>%nodelabel%</b>.
Aktueller Wert: %parm[#2]%.
</descr>
<logmsg dest="logndisplay">
Didactum Spannungs-Alarm: %nodelabel%
</logmsg>
<severity>Major</severity>
<alarm-data reduction-key="%uei%:%dpname%:%nodeid%"
alarm-type="1"
auto-clean="false"/>
</event>
<!-- Türkontakt-Alarm -->
<event>
<uei>uei.didactum/trap/doorAlarm</uei>
<event-label>Didactum: Türkontakt geöffnet</event-label>
<descr>
Türkontakt-Alarm auf Gerät <b>%nodelabel%</b>.
Sensor: %parm[#1]%.
</descr>
<logmsg dest="logndisplay">
Didactum Türkontakt offen: %nodelabel% – Sensor %parm[#1]%
</logmsg>
<severity>Warning</severity>
<alarm-data reduction-key="%uei%:%dpname%:%nodeid%:%parm[#1]%"
alarm-type="1"
auto-clean="false"/>
</event>
<!-- Gerät-Neustart -->
<event>
<uei>uei.didactum/trap/deviceReboot</uei>
<event-label>Didactum: Gerät neugestartet</event-label>
<descr>Das Didactum-Gerät %nodelabel% wurde neu gestartet.</descr>
<logmsg dest="logndisplay">
Didactum Neustart: %nodelabel%
</logmsg>
<severity>Warning</severity>
</event>
</events>8.2 Events-Datei in OpenNMS registrieren
sudo nano /etc/opennms/eventconf.xml
Folgenden Eintrag vor dem abschließenden </events>-Tag hinzufügen:
<event-file>events/didactum.events.xml</event-file>
# Eventd neu laden: sudo /usr/share/opennms/bin/send-event.pl \ uei.opennms.org/internal/reloadDaemonConfig \ --parm 'daemonName Eventd'
9. SNMP-Trap-Integration
SNMP-Traps erlauben dem Didactum-Gerät, bei Alarmen sofort eine Meldung an OpenNMS zu senden – ohne aktives Polling. OpenNMS empfängt Traps über den Trapd-Dienst auf UDP Port 162.
9.1 Trapd konfigurieren
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 für Didactum
Die Zuordnung von Didactum-Trap-OIDs zu OpenNMS-Events erfolgt in der Events-Konfiguration. Folgenden Abschnitt in /etc/opennms/events/didactum.events.xml ergänzen:
<!-- SNMP Trap Mapping: Temperatur-Alarm Trap OID 1.3.6.1.4.1.3854.1.7.1 -->
<event>
<uei>uei.didactum/trap/temperatureAlarm</uei>
<event-label>Didactum: Temperatur-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>Temperatur-Alarm Trap von Didactum-Gerät %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: Leckage-Alarm Trap OID 1.3.6.1.4.1.3854.1.7.2 -->
<event>
<uei>uei.didactum/trap/leakAlarm</uei>
<event-label>Didactum: Leckage-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>LECKAGE ALARM von Didactum-Gerät %nodelabel%! Sofortiger Handlungsbedarf!</descr>
<logmsg dest="logndisplay">LECKAGE ALARM: %nodelabel%</logmsg>
<severity>Critical</severity>
<alarm-data reduction-key="%uei%:%nodeid%" alarm-type="1"/>
</event>9.3 Wichtige Didactum Trap-OIDs
| Trap-OID | Ereignis | Specific-Wert | OpenNMS Severity |
|---|---|---|---|
| 1.3.6.1.4.1.3854.1.7.1 | Temperatur-Alarm | 1 | Major |
| 1.3.6.1.4.1.3854.1.7.2 | Leckage-Alarm | 2 | Critical |
| 1.3.6.1.4.1.3854.1.7.3 | Luftfeuchtigkeits-Alarm | 3 | Major |
| 1.3.6.1.4.1.3854.1.7.4 | Spannungs-Alarm | 4 | Major |
| 1.3.6.1.4.1.3854.1.7.10 | Türkontakt geöffnet | 10 | Warning |
| 1.3.6.1.4.1.3854.1.7.14 | Rauchmelder-Alarm | 14 | Critical |
| 1.3.6.1.4.1.3854.1.7.99 | Gerät-Neustart | 99 | Warning |
9.4 Trapd neu laden und testen
# Trapd neu laden: sudo /usr/share/opennms/bin/send-event.pl \ uei.opennms.org/internal/reloadDaemonConfig \ --parm 'daemonName Trapd' # Test-Trap vom Didactum-Gerät an OpenNMS senden (simuliert): 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 # OpenNMS Event-Log auf eingehende Traps prüfen: sudo tail -f /var/log/opennms/trapd.log
10. Alarmierung und Benachrichtigungen
10.1 Threshold-basierte Alarmierung konfigurieren
OpenNMS kann gesammelte SNMP-Werte gegen Schwellwerte prüfen und bei Überschreitung automatisch Events erzeugen.
sudo nano /etc/opennms/thresholds.xml
<?xml version="1.0"?>
<thresholding-config>
<group name="didactum" rrdRepository="/var/lib/opennms/rrd/snmp/">
<!-- Temperatur Sensor 1: Warning bei 30 °C (300), Critical bei 35 °C (350) -->
<threshold type="high"
ds-name="tempValue1"
ds-type="node"
value="300"
rearm="280"
trigger="2"
description="Temperatur Sensor 1 zu hoch">
<resource-filter field="ifIndex">.*</resource-filter>
</threshold>
<threshold type="high"
ds-name="tempValue1"
ds-type="node"
value="350"
rearm="320"
trigger="1"
description="Temperatur Sensor 1 kritisch"
triggeredUEI="uei.didactum/trap/temperatureAlarm">
</threshold>
<!-- Leckage Sensor 1: Sofortalarm bei Wert > 0 -->
<threshold type="high"
ds-name="leakStatus1"
ds-type="node"
value="0.5"
rearm="0"
trigger="1"
description="Leckage Sensor 1 ausgelöst"
triggeredUEI="uei.didactum/trap/leakAlarm">
</threshold>
<!-- Luftfeuchtigkeit Sensor 1: Warning bei 70 %, Critical bei 80 % -->
<threshold type="high"
ds-name="humValue1"
ds-type="node"
value="70"
rearm="65"
trigger="2"
description="Luftfeuchtigkeit Sensor 1 zu hoch">
</threshold>
<threshold type="low"
ds-name="humValue1"
ds-type="node"
value="20"
rearm="25"
trigger="2"
description="Luftfeuchtigkeit Sensor 1 zu niedrig">
</threshold>
<!-- Spannung Sensor 1: Warning außerhalb 207–253 V (2070–2530 × 10) -->
<threshold type="high"
ds-name="voltValue1"
ds-type="node"
value="2530"
rearm="2500"
trigger="2"
description="Spannung Sensor 1 zu hoch (über 253 V)">
</threshold>
<threshold type="low"
ds-name="voltValue1"
ds-type="node"
value="2070"
rearm="2100"
trigger="2"
description="Spannung Sensor 1 zu niedrig (unter 207 V)">
</threshold>
</group>
</thresholding-config>10.2 Threshold-Gruppe dem Collection-Package zuweisen
In /etc/opennms/collectd-configuration.xml im Didactum-Package ergänzen:
<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 E-Mail-Benachrichtigung einrichten
- Navigation: Admin → Configure Notifications → New Notification.
- Event-Filter: Events matching UEI containing 'didactum'
- Destination Path: Vorhandenen Pfad wählen oder neu anlegen.
- Destination Path konfigurieren (Admin → Configure Notifications → Destination Paths):
- Step 1: E-Mail an admin@example.com – Sofort (0 Minuten)
- Step 2 (Eskalation): E-Mail an leitung@example.com – Nach 15 Minuten ohne Quittierung
10.4 Empfohlene Schwellwert-Einstellungen
| Sensortyp | ds-name | Warning-Wert | Critical-Wert | Rearm-Wert |
|---|---|---|---|---|
| Temperatur IT-Rack (× 10) | tempValue1 | 300 (30 °C) | 350 (35 °C) | 280 (28 °C) |
| Temperatur USV-Raum (× 10) | tempValue2 | 250 (25 °C) | 300 (30 °C) | 230 (23 °C) |
| Luftfeuchtigkeit | humValue1 | 70 % rF | 80 % rF | 65 % rF |
| Leckage | leakStatus1 | – | 0,5 (Wert > 0) | 0 |
| Spannung hoch (× 10) | voltValue1 | 2530 (253 V) | 2600 (260 V) | 2500 (250 V) |
| Spannung niedrig (× 10) | voltValue1 | 2070 (207 V) | 1960 (196 V) | 2100 (210 V) |
11. OID-Referenz für OpenNMS
Alle OIDs basieren auf der Didactum Enterprise OID-Basis 1.3.6.1.4.1.3854. Der Platzhalter {n} steht für den Sensorindex (1 = erster Sensor usw.).
11.1 Temperatursensoren
| OID | Beschreibung | Einheit | alias (datacollection.xml) | OpenNMS-Hinweis |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.{n} | Temperaturwert Sensor n | °C × 10 | tempValue{n} | Threshold × 10; Grafik-Label anpassen |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.4.{n} | Temperatur-Status Sensor n | Enum 0/1/2 | tempStatus{n} | Für Threshold-Trigger-Events |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.7.{n} | Oberer Grenzwert Sensor n | °C × 10 | tempHiLimit{n} | Informativ; als HRULE in Grafiken |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.8.{n} | Unterer Grenzwert Sensor n | °C × 10 | tempLoLimit{n} | Informativ; als HRULE in Grafiken |
| 1.3.6.1.4.1.3854.1.2.2.1.16.1.2.{n} | Sensor-Name n | Text | – | Für Beschriftung in Reports |
11.2 Leckagesensoren
| OID | Beschreibung | Einheit | alias | OpenNMS-Hinweis |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.18.1.4.{n} | Leckage-Status Sensor n | 0=OK, 1=Alarm | leakStatus{n} | Threshold bei 0,5; Critical-Severity |
| 1.3.6.1.4.1.3854.1.2.2.1.18.1.3.{n} | Leckage-Wert Sensor n | 0=trocken | leakValue{n} | Alternativ zu Status-OID |
| 1.3.6.1.4.1.3854.1.2.2.1.18.1.2.{n} | Sensor-Name n | Text | – | Für Beschriftung |
11.3 Luftfeuchtigkeitssensoren
| OID | Beschreibung | Einheit | alias | OpenNMS-Hinweis |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.3.{n} | Luftfeuchtigkeitswert Sensor n | % rF | humValue{n} | Kein Faktor nötig |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.4.{n} | Luftfeuchtigkeits-Status n | Enum 0/1/2 | humStatus{n} | Für Threshold-Trigger |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.7.{n} | Oberer Grenzwert Sensor n | % rF | humHiLimit{n} | Informativ |
| 1.3.6.1.4.1.3854.1.2.2.1.17.1.8.{n} | Unterer Grenzwert Sensor n | % rF | humLoLimit{n} | Informativ |
11.4 Weitere Sensoren
| OID | Beschreibung | Einheit | alias | OpenNMS-Hinweis |
|---|---|---|---|---|
| 1.3.6.1.4.1.3854.1.2.2.1.15.1.3.{n} | Spannungswert 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} | Spannungs-Status Sensor n | Enum 0/1/2 | voltStatus{n} | Für Threshold-Trigger |
| 1.3.6.1.4.1.3854.1.2.2.1.10.1.3.{n} | Türkontakt-Status n | 0=zu, 1=offen | doorStatus{n} | Threshold bei 0,5; Warning-Severity |
| 1.3.6.1.4.1.3854.1.2.2.1.11.1.3.{n} | Erschütterung / Bewegung n | 0=keine, 1=Alarm | vibStatus{n} | Threshold bei 0,5 |
| 1.3.6.1.4.1.3854.1.2.2.1.14.1.3.{n} | Rauchmelder-Status n | 0=OK, 1=Alarm | smokeStatus{n} | Threshold bei 0,5; Critical-Severity |
| 1.3.6.1.2.1.1.3.0 | System Uptime (sysUpTime) | Hundertstelsekunden | sysUpTime | Standard-MIB, immer verfügbar |
12. Fehlerbehebung (Troubleshooting)
| Problem | Mögliche Ursache / Lösung |
|---|---|
| Gerät erscheint nach Import nicht in OpenNMS | Provisiond-Log prüfen: tail -f /var/log/opennms/provisiond.log. Requisition manuell synchronisieren: Admin → Provisioning Requisitions → Synchronize. |
| SNMP-Status am Node zeigt Fehler | Community-String in snmp-config.xml prüfen. Test: snmpwalk -v2c -c public 192.168.1.100. Firewall UDP 161 prüfen. |
| Keine Messdaten / Grafiken leer | Collectd-Log prüfen: tail -f /var/log/opennms/collectd.log. Data-Collection-Gruppe korrekt referenziert? Thresholding aktiviert? RRD-Verzeichnis beschreibbar? |
| Temperatur-Rohwert × 10 in Grafiken | In der Grafik-Definition eine Formel hinterlegen, die den Wert durch 10 dividiert. Alternativ in der Beschriftung klarstellen, dass der Wert × 10 dargestellt wird. |
| Traps kommen nicht an | UDP Port 162 auf dem OpenNMS-Server in der Firewall öffnen. Trapd-Dienst läuft? Korrekte IP als Trap-Receiver im Didactum-Gerät eingetragen? |
| Events werden nicht zu Alarmen | Alarm-Data-Block in der Event-Definition vorhanden? reduction-key korrekt gesetzt? Eventd-Log prüfen: tail -f /var/log/opennms/eventd.log. |
| Keine Benachrichtigungen bei Alarm | Notification-Konfiguration prüfen. Destination-Path aktiv? E-Mail-Einstellungen korrekt? Notifd-Log: tail -f /var/log/opennms/notifd.log. |
| XML-Konfiguration wird nicht übernommen | XML auf Syntaxfehler prüfen: xmllint --noout /etc/opennms/events/didactum.events.xml. Daemon-Reload senden oder OpenNMS neu starten: sudo systemctl restart opennms. |
Diagnose-Befehle Übersicht
# SNMP-Erreichbarkeit testen: snmpwalk -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854 # Einzelnen Sensor abfragen: snmpget -v2c -c public 192.168.1.100 1.3.6.1.4.1.3854.1.2.2.1.16.1.3.1 # XML-Syntax prüfen: xmllint --noout /etc/opennms/events/didactum.events.xml xmllint --noout /etc/opennms/datacollection/didactum.xml # OpenNMS-Dienst neu starten: sudo systemctl restart opennms # Einzelne Daemons neu laden (ohne Neustart): 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' # Logs in Echtzeit verfolgen: 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 # Test-Trap senden (Leckage simulieren): 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 # RRD-Daten prüfen: rrdtool lastupdate /var/lib/opennms/rrd/snmp/1/didactum-temperature.jrb # Requisition-Status per REST-API abfragen: curl -u admin:admin \ 192.168.1.40/opennms/rest/requisitions/Didactum-Monitoring
Konfigurationsdateien Schnell-Referenz
| Datei | Pfad | Zweck |
|---|---|---|
| snmp-config.xml | /etc/opennms/ | SNMP-Community und Version pro IP |
| didactum.xml | /etc/opennms/datacollection/ | SNMP-Datensammlung (OIDs, RRD-Typen) |
| collectd-configuration.xml | /etc/opennms/ | Collection-Packages und Intervalle |
| didactum.events.xml | /etc/opennms/events/ | Event-Definitionen und Trap-Mapping |
| eventconf.xml | /etc/opennms/ | Registrierung der Events-Datei |
| thresholds.xml | /etc/opennms/ | Schwellwerte für Alarmierung |
| trapd-configuration.xml | /etc/opennms/ | SNMP-Trap-Empfänger-Konfiguration |
| notifications.xml | /etc/opennms/ | Benachrichtigungsregeln |
Für firmware-spezifische OIDs und unterstützte Sensortypen immer die aktuelle Didactum-Gerätedokumentation konsultieren.