Didactum Monitoring & Zenoss Integration
Complete step-by-step guide for integrating Didactum monitoring devices and sensors into Zenoss Core / Zenoss Service Dynamics (ZSD) via SNMP – including device discovery, ZenPack configuration, MIB import, SNMP data sources (datasources), and threshold configuration (thresholds) in the monitoring template, full OID reference for all sensor types (temperature, leakage, humidity, door contact, smoke), SNMP trap processing, as well as event class and notification configuration.
Architecture Note: Zenoss works with monitoring templates and ZenPacks. The Didactum device is created as a device in Zenoss and assigned to a device class. A monitoring template defines which OIDs (datasources) are queried and which thresholds are monitored. SNMP traps are sent from the Didactum device to the Zenoss server (UDP port 162) and converted into Zenoss events via event class mappings. The Zenoss server actively sends SNMP GET requests (UDP port 161) to the Didactum device.
- Software: Zenoss Core 6.x or Zenoss Service Dynamics (ZSD)
- Components: Zenoss Server, zenhub, zenperfsnmp, zentrap, zenactions
- Protocol: SNMP v1 / v2c / v3
- Devices: Didactum Monitoring System 100T / 300T / 500T / 550T
- Sensors: Temperature, leakage, humidity, door contact, smoke
1. Prerequisites & System Overview
Zenoss Server
| Component | Requirement / Details |
|---|---|
| Zenoss Version | Zenoss Core 6.x or Zenoss Service Dynamics; older versions (4.x / 5.x) work analogously |
| Daemon zenperfsnmp | Must be active – responsible for SNMP polling; check zenoss status |
| Daemon zentrap | Must be active – responsible for SNMP trap reception on UDP port 162 |
| Daemon zenactions | Must be active – responsible for email notifications |
| Network (outbound) | UDP port 161 from the Zenoss server to the Didactum device (SNMP polling) |
| Network (inbound) | UDP port 162 from the Didactum device to the Zenoss server (SNMP traps) |
| Network Access | IP reachability from the Zenoss server to the Didactum device is required |
Didactum Device
| Requirement | Details |
|---|---|
| Model | Monitoring System 100T, 300T, 500T, or 550T |
| SNMP | SNMP enabled (v2c recommended) |
| Community String | Custom community string (do not use "public") |
| Trap Destination | IP address of the Zenoss server |
| MIB File | Downloadable under System Settings → SNMP |
Enterprise OIDs per Firmware Generation
| Device / Firmware | Enterprise OID (Base) |
|---|---|
| Older models / older firmware | .1.3.6.1.4.1.46501 |
| Newer models / current firmware | .1.3.6.1.4.1.39052 |
Note: You can determine which enterprise OID your device uses via:
snmpwalk -v 2c -c public 192.168.1.50 .1.3.6.1.2.1.1.2.0
2. Enable SNMP on the Didactum Device
Step 1 – Open the Web Interface
192.168.1.50 (Adjust the IP of the Didactum device)
Step 2 – Open SNMP Settings
System Settings → SNMP
Step 3 – Enter the Following Values
| Field in Didactum Web Interface | Recommended Value |
|---|---|
| Enable SNMP | Enabled |
| SNMP Version | v2c (recommended) |
| Community String (Read) | didactum_zenoss (do not use "public"!) |
| SNMP Port | 161 |
| Trap Destination | IP address of the Zenoss server |
| Trap Community | didactum_trap |
| Trap Port | 162 |
Step 4 – Download the MIB File
System Settings → SNMP → "Download MIB File" File will be saved as didactum.mib. This file will be imported into Zenoss in step 3.
Save settings. The device will now immediately send SNMP traps to the Zenoss server.
3. Import the MIB File into Zenoss
Zenoss stores MIB files in the file system on the server and loads them via the command line or the web interface. After the import, Zenoss resolves OID numbers in SNMP trap events into symbolic names.
Step 1 – Copy the MIB File to the Zenoss Server
Standard MIB directory Zenoss Core (Linux): /opt/zenoss/share/mibs/site/ Upload file (e.g., via SCP from the admin machine): scp didactum.mib zenoss@192.168.1.100:/opt/zenoss/share/mibs/site/ Alternatively, directly on the server: cp didactum.mib /opt/zenoss/share/mibs/site/
Step 2 – Compile the MIB (as zenoss user)
su - zenoss cd /opt/zenoss # Compile MIB python $ZENHOME/bin/zenmib run /opt/zenoss/share/mibs/site/didactum.mib # Success message: # INFO zen.ZenMib: Loaded MIB DIDACTUM-MIB # INFO zen.ZenMib: Saved X OIDs to ZODB
Step 3 – MIB Import via the Zenoss Web Interface (Alternative Method)
Zenoss Web UI → Advanced → MIBs → Add MIB → "Upload MIB File" → select didactum.mib → Click "Add" → MIB appears in the MIB list as DIDACTUM-MIB
Step 4 – Verify MIB Import
Zenoss Web UI → Advanced → MIBs → DIDACTUM-MIB → OID tree is displayed → sensorValue (.1.3.6.1.4.1.46501.5.1.1.7) appears with a symbolic name
Completed MIB Import Configuration (DIDACTUM-MIB.txt)
If no MIB file is available from the device, copy the following minimal MIB structure as DIDACTUM-MIB.txt into the Zenoss MIB directory and compile it as shown above:
-- ================================================================
-- DIDACTUM-MIB – Minimal MIB for Zenoss Import
-- File: DIDACTUM-MIB.txt
-- For older devices: enterprises.46501
-- For newer devices: enterprises.39052 (Adjust OID)
-- ================================================================
DIDACTUM-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, OBJECT-TYPE, Integer32, enterprises
FROM SNMPv2-SMI
NOTIFICATION-TYPE
FROM SNMPv2-SMI;
didactum MODULE-IDENTITY
LAST-UPDATED "202401010000Z"
ORGANIZATION "Didactum Security GmbH"
CONTACT-INFO "support@didactum-security.com"
DESCRIPTION "Didactum Monitoring System MIB"
::= { enterprises 46501 }
sensorTable OBJECT-TYPE
SYNTAX SEQUENCE OF SensorEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Table of all connected sensors"
::= { didactum 5 1 1 }
sensorEntry OBJECT-TYPE
SYNTAX SensorEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Single sensor entry"
INDEX { sensorIndex }
::= { sensorTable 1 }
SensorEntry ::= SEQUENCE {
sensorIndex Integer32,
sensorID Integer32,
sensorType Integer32,
sensorName OCTET STRING,
sensorStatus Integer32,
sensorValue Integer32
}
sensorIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current
DESCRIPTION "Index"
::= { sensorEntry 1 }
sensorID OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current
DESCRIPTION "Sensor ID" ::= { sensorEntry 2 }
sensorType OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current
DESCRIPTION "Sensor Type"
::= { sensorEntry 3 }
sensorName OBJECT-TYPE SYNTAX OCTET STRING MAX-ACCESS read-only STATUS current
DESCRIPTION "Sensor Name" ::= { sensorEntry 5 }
sensorStatus OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current
DESCRIPTION "0=OK 1=Alarm 2=No Signal" ::= { sensorEntry 6 }
sensorValue OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current
DESCRIPTION "Measured Value (Temperature: x10)" ::= { sensorEntry 7 }
didactumAlarmTrap NOTIFICATION-TYPE
OBJECTS { sensorName, sensorStatus, sensorValue }
STATUS current
DESCRIPTION "Alarm trap on sensor status change"
::= { didactum 1 1 }
END
4. Create Device Class and Didactum Device
Step 1 – Create Device Class
Zenoss Web UI → Infrastructure → Device Classes → Add Device Class Class Path: /Devices/Environmental/Didactum Description: Didactum Environmental Monitoring Devices
Step 2 – Set SNMP Settings for the Device Class
Zenoss Web UI → Infrastructure → Device Classes → /Devices/Environmental/Didactum → Configuration Properties (zProperties) zSnmpCommunity: didactum_zenoss zSnmpVer: v2c zSnmpPort: 161 zSnmpTimeout: 5 zSnmpTries: 3 → Save
Step 3 – Add Didactum Device
Zenoss Web UI → Infrastructure → Devices → Add Device Device Name / IP: 192.168.1.50 Device Class: /Devices/Environmental/Didactum Title: Didactum-Monitor-01 Collector: localhost (or remote collector if available) → Click "Add" → Zenoss automatically starts device modeling
Step 4 – Verify Device Modeling
Zenoss Web UI → Infrastructure → Devices → Didactum-Monitor-01 → "Details" tab → sysDescr: Didactum Monitoring System (automatically read via SNMP) → sysUpTime, sysContact, sysLocation appear after successful modeling If modeling fails: → Zenoss CLI: zenmodeler run -d 192.168.1.50 → Check log: tail -f /opt/zenoss/log/zenmodeler.log
5. Create Monitoring Template with Datasources and Thresholds
In Zenoss, a monitoring template fully defines which OIDs are queried (datasources / datapoints) and which thresholds are monitored (thresholds). The template is assigned to the device class /Devices/Environmental/Didactum and automatically applies to all devices in this class.
Important – Temperature Thresholds: The Didactum device delivers temperature values as raw value × 10. 25.5 °C = OID value 255. All temperature thresholds in the monitoring template must also be specified as × 10.
Step 1 – Create a New Monitoring Template
Zenoss Web UI → Advanced → Monitoring Templates → Add Template Template Name: DidactumSensors Device Class: /Devices/Environmental/Didactum Description: SNMP Monitoring for Didactum Environmental Sensors → Click "Add"
Step 2 – Create Datasources (OID Queries)
Zenoss Web UI → Advanced → Monitoring Templates → DidactumSensors
→ Datasources → Add Datasource
-- ================================================================
-- Datasource 1: Temperature Sensor Measured Value (Sensor ID 101001)
-- ================================================================
Name: temperature_value_01
Type: SNMP
OID: .1.3.6.1.4.1.46501.5.1.1.7.101001
Component: (leave empty)
Enabled: Yes
→ Save
Datapoint temperature_value_01_value:
RRD Type: GAUGE
Description: Temperature Sensor 01 Raw Value x10 (235 = 23.5 degrees C)
-- ================================================================
-- Datasource 2: Temperature Sensor Status
-- ================================================================
Name: temperature_status_01
Type: SNMP
OID:
.1.3.6.1.4.1.46501.5.1.1.6.101001
Enabled: Yes
Datapoint temperature_status_01_value:
RRD Type: GAUGE
Description: 0=OK, 1=Alarm, 2=No Signal
-- ================================================================
-- Datasource 3: Water Sensor / Leakage (Sensor ID 107001)
-- ================================================================
Name: leakage_value_01
Type: SNMP
OID: .1.3.6.1.4.1.46501.5.1.1.7.107001
Enabled: Yes
Datapoint leakage_value_01_value:
RRD Type: GAUGE
Description: 0=dry/OK, 1=Water detected/CRITICAL
-- ================================================================
-- Datasource 4: Humidity (Sensor ID 102001)
-- ================================================================
Name: humidity_value_01
Type: SNMP
OID: .1.3.6.1.4.1.46501.5.1.1.7.102001
Enabled: Yes
Datapoint humidity_value_01_value:
RRD Type: GAUGE
Description: Humidity in %
-- ================================================================
-- Datasource 5: Door Contact (Sensor ID 104001)
-- ================================================================
Name: door_contact_01
Type:
SNMP
OID: .1.3.6.1.4.1.46501.5.1.1.7.104001
Enabled: Yes
Datapoint door_contact_01_value:
RRD Type: GAUGE
Description: 0=closed/OK, 1=opened/Warning
-- ================================================================
-- Datasource 6: Smoke Detector (Sensor ID 106001)
-- ================================================================
Name: smoke_detector_01
Type: SNMP
OID: .1.3.6.1.4.1.46501.5.1.1.7.106001
Enabled:
Yes
Datapoint smoke_detector_01_value:
RRD Type: GAUGE
Description: 0=no smoke/OK, 1=Alarm/CRITICALStep 3 – Create Thresholds
Zenoss Web UI → Advanced → Monitoring Templates → DidactumSensors → Thresholds → Add Threshold -- ================================================================ -- Threshold 1: Temperature Warning -- ================================================================ Name: Temperature_Warning Type: MinMaxThreshold Datapoints: temperature_value_01_value Max Value: 280 (Raw value 280 = 28.0 degrees C) Min Value: (leave empty) Severity: Warning Event Class: /Environmental/Didactum → Save -- ================================================================ -- Threshold 2: Temperature Critical -- ================================================================ Name: Temperature_Critical Type: MinMaxThreshold Datapoints: temperature_value_01_value Max Value: 350 (Raw value 350 = 35.0 degrees C) Severity: Critical Event Class: /Environmental/Didactum → Save -- ================================================================ -- Threshold 3: Temperature Sensor No Signal -- ================================================================ Name: Temperature_NoSignal Type: MinMaxThreshold Datapoints: temperature_status_01_value Max Value: 1 Severity: Warning Event Class: /Environmental/Didactum → Save -- ================================================================ -- Threshold 4: Leakage Critical -- ================================================================ Name: Leakage_Critical Type: MinMaxThreshold Datapoints: leakage_value_01_value Max Value: 0 (Alarm if value > 0, i.e., starting from 1) Severity: Critical Event Class: /Environmental/Didactum → Save -- ================================================================ -- Threshold 5: Humidity Warning -- ================================================================ Name: Humidity_Warning Type: MinMaxThreshold Datapoints: humidity_value_01_value Max Value: 80 Severity: Warning Event Class: /Environmental/Didactum → Save -- ================================================================ -- Threshold 6: Humidity Critical -- ================================================================ Name: Humidity_Critical Type: MinMaxThreshold Datapoints: humidity_value_01_value Max Value: 90 Severity: Critical Event Class: /Environmental/Didactum → Save -- ================================================================ -- Threshold 7: Door Contact Opened -- ================================================================ Name: Door_Open_Warning Type: MinMaxThreshold Datapoints: door_contact_01_value Max Value: 0 (Alarm if value > 0) Severity: Warning Event Class: /Environmental/Didactum → Save -- ================================================================ -- Threshold 8: Smoke Detector Critical -- ================================================================ Name: Smoke_Critical Type: MinMaxThreshold Datapoints: smoke_detector_01_value Max Value: 0 (Alarm if value > 0) Severity: Critical Event Class: /Environmental/Didactum → Save
Step 4 – Assign and Bind Template to Device
Zenoss Web UI → Infrastructure → Devices → Didactum-Monitor-01 → "Monitoring Templates" tab → Template "DidactumSensors" appears (automatically through device class assignment) → If not: "Add Template" → select DidactumSensors → Apply → Zenoss starts SNMP polling according to the template definition → Graphs appear after the first polling cycle (default: 5 minutes)
6. Configure Event Classes for Didactum Alarms
Zenoss organizes all occurrences (events) into event classes. A dedicated event class is created for Didactum, which aggregates threshold alarms and SNMP trap events to handle them uniformly.
Step 1 – Create Event Class
Zenoss Web UI → Events → Event Classes → Add Event Class Class Path: /Environmental/Didactum Description: Didactum Environmental Monitoring Alarms
Step 2 – Create Event Class Mapping for SNMP Traps
Zenoss Web UI → Events → Event Classes → /Environmental/Didactum
→ Event Class Mappings → Add Mapping
-- Mapping 1: General Didactum Alarm Trap --
Mapping Name: DidactumAlarmTrap
Event Class: /Environmental/Didactum
Rule: oid.startswith(".1.3.6.1.4.1.46501.1.1")
Severity:
Critical
Summary: Didactum Sensor Alarm: ${evt/oid}
Message: Didactum SNMP trap from ${evt/device}: ${evt/summary}
→ Save
-- Mapping 2: Trap from newer device (Enterprise OID 39052) --
Mapping Name: DidactumAlarmTrap_39052
Rule: oid.startswith(".1.3.6.1.4.1.39052.1.1")
Severity: Critical
Summary: Didactum Sensor Alarm (39052): ${evt/oid}
→ SaveStep 3 – Configure Event Transforms (Optional)
Zenoss Web UI →
Events → Event Classes → /Environmental/Didactum → Transform
# Python Transform: Adjust severity according to sensor type
if "leakage" in evt.component.lower() or "smoke" in evt.component.lower():
evt.severity = 5 # Critical
elif "temperature" in evt.component.lower():
if int(evt.current) >= 350:
evt.severity = 5 # Critical
else:
evt.severity = 3 # Warning
→ Save7. Configure SNMP Trap Reception
Step 1 – Check zentrap Daemon
As zenoss user on the Zenoss server: zenoss status | grep zentrap # Expected result: zentrap ... running If zentrap is not running: zenoss start zentrap # or: supervisorctl start zentrap (on Zenoss 6.x / ZSD)
Step 2 – Configure Trap Community in Zenoss
Zenoss Web UI → Advanced → Settings → SNMP Traps Trap Port: 162 Community String: didactum_trap (must match the Didactum device) → Save → Restart zentrap: zenoss restart zentrap
Step 3 – Set Trap Forwarding in Didactum Web Interface
Didactum Web Interface → System Settings → SNMP → Trap Destinations Trap Destination: 192.168.1.100 (IP of the Zenoss server) Trap Community: didactum_trap Trap Version: v2c Trap Port: 162 → Save
Step 4 – Test Trap Reception
Trigger test trap in Didactum Web Interface: System Settings → SNMP → "Send Test Trap" Check in Zenoss: Zenoss Web UI → Events → Event Console → New event with device 192.168.1.50 appears → Event Class: /Environmental/Didactum → Severity: Critical → Summary: Didactum Sensor Alarm Check zentrap log on the server: tail -f /opt/zenoss/log/zentrap.log
8. Configure Notifications
Create Action (Email)
Zenoss Web UI → Events → Triggers → Actions → Add Action
Action Name: Didactum_Email_Admin
Action Type: Email
Host (SMTP): mail.yourdomain.com
From: zenoss@yourdomain.com
To: admin@yourdomain.com
Subject: [Zenoss] Didactum Alarm: ${evt/device} – ${evt/summary}
Body:
Time: ${evt/firstTime}
Device: ${evt/device} (${evt/ipAddress})
Severity: ${evt/severity}
Event Class: ${evt/eventClass}
Summary: ${evt/summary}
Message: ${evt/message}
OID: ${evt/oid}
→ SaveCreate Trigger
Zenoss Web UI → Events → Triggers → Add Trigger
Trigger Name: Didactum_Critical_Trigger
Enabled: Yes
Rule: (evt/eventClass).startswith("/Environmental/Didactum")
and evt/severity >= 4 (4=Error / 5=Critical)
→ SaveCreate Notification and Link Trigger
Zenoss Web UI → Events → Triggers → Notifications → Add Notification Notification Name: Didactum_Sensor_Alert Action: Didactum_Email_Admin Trigger: Didactum_Critical_Trigger Delay: 0 seconds (immediately) Repeat: 300 seconds (repeat every 5 minutes as long as alarm is active) → Save Second notification for Warning: Trigger: Didactum_Warning_Trigger (analogous; evt/severity >= 3) Delay: 0 seconds Repeat: 600 seconds → Save
9. Configure Graphs and Dashboard
Create Graph Definition in Monitoring Template
Zenoss Web UI → Advanced → Monitoring Templates → DidactumSensors → Graph Definitions
→ Add Graph Definition
-- Graph 1: Temperature Trend --
Graph Name: Temperature Sensor 01
Units: Raw Value (÷10 = Degrees
C)
Graph Points:
- Datapoint: temperature_value_01_value
Legend: Temperature (Raw value x10)
Color: #e05050
Threshold Lines:
- 280 (Warning) / 350 (Critical)
→ Save
-- Graph 2: Humidity --
Graph Name: Humidity Sensor 01
Units: %
Graph Points:
- Datapoint: humidity_value_01_value
Legend: Humidity %
→ SaveConfigure Dashboard Portlets
Zenoss Web UI → Dashboard → Add Portlet
Portlet 1: Device Issues
Filter: Device Class = /Devices/Environmental/Didactum
Shows: Device status and active events
Portlet 2: Event View
Filter: Event Class = /Environmental/Didactum
Severity: Warning and Critical
Shows: All active Didactum alarms
Portlet 3: Network Map
Filter: /Devices/Environmental/Didactum
Shows: Didactum devices with status color-coding
Portlet 4: Device Performance (Pro Version)
Device: Didactum-Monitor-01
Template: DidactumSensors
Graph: Temperature Sensor 0110. SNMP OID Reference for Didactum Sensors
All Didactum OIDs start with .1.3.6.1.4.1.46501 (older firmware) or .1.3.6.1.4.1.39052 (newer models). The sensor ID is appended at the end.
OID Fields per Sensor
| Field | OID Suffix | Meaning | Example (Sensor 101001) |
|---|---|---|---|
| Sensor Index | .5.1.1.1.SENSOR_ID | Internal index | .1.3.6.1.4.1.46501.5.1.1.1.101001 |
| Sensor ID | .5.1.1.2.SENSOR_ID | Numeric sensor ID | .1.3.6.1.4.1.46501.5.1.1.2.101001 |
| Sensor Type | .5.1.1.3.SENSOR_ID | Type identifier code | .1.3.6.1.4.1.46501.5.1.1.3.101001 |
| Sensor Name | .5.1.1.5.SENSOR_ID | Label (String) | .1.3.6.1.4.1.46501.5.1.1.5.101001 |
| Sensor Status | .5.1.1.6.SENSOR_ID | 0=OK, 1=Alarm, 2=No Signal | .1.3.6.1.4.1.46501.5.1.1.6.101001 |
| Sensor Measured Value | .5.1.1.7.SENSOR_ID | Current measured value | .1.3.6.1.4.1.46501.5.1.1.7.101001 |
Sensor Types with Full OIDs and Zenoss Threshold Values
| Sensor Type | Sensor ID | OID Measured Value | OID Status | Zenoss Threshold (Max Value) |
|---|---|---|---|---|
| Temperature Sensor (digital) | 101001 | .1.3.6.1.4.1.46501.5.1.1.7.101001 | .1.3.6.1.4.1.46501.5.1.1.6.101001 | Warning Max 280 / Critical Max 350 (Raw value × 10) |
| Temperature Sensor (analog) | 201001 | .1.3.6.1.4.1.39052.5.2.1.7.201001 | .1.3.6.1.4.1.39052.5.2.1.6.201001 | Warning Max 280 / Critical Max 350 (× 10) |
| Water Sensor / Leakage | 107001 | .1.3.6.1.4.1.46501.5.1.1.7.107001 | .1.3.6.1.4.1.46501.5.1.1.6.107001 | Critical Max 0 (Alarm if value > 0) |
| Humidity | 102001 | .1.3.6.1.4.1.46501.5.1.1.7.102001 | .1.3.6.1.4.1.46501.5.1.1.6.102001 | Warning Max 80 / Critical Max 90 (directly %) |
| Dry Contact | 101003 | .1.3.6.1.4.1.39052.5.1.1.7.101003 | .1.3.6.1.4.1.39052.5.1.1.6.101003 | Warning Max 0 (Alarm if value > 0) |
| Door Contact | 104001 | .1.3.6.1.4.1.46501.5.1.1.7.104001 | .1.3.6.1.4.1.46501.5.1.1.6.104001 | Warning Max 0 (Alarm if value > 0) |
| Smoke Detector | 106001 | .1.3.6.1.4.1.46501.5.1.1.7.106001 | .1.3.6.1.4.1.46501.5.1.1.6.106001 | Critical Max 0 (Alarm if value > 0) |
Determine Sensor ID: In the Didactum Web Interface under System Tree → Select Sensor → Details. The displayed sensor ID is appended as the last element to the OID. With multiple identical sensors, the last digit increases: 101001, 101002, 101003, etc.
Zenoss Threshold Logic: MinMaxThreshold triggers an alarm when the value exceeds the Max Value. For binary sensors (leakage, door contact, smoke), therefore set Max Value = 0: alarm as soon as value > 0. For temperature: Max Value = 280 (Warning) or 350 (Critical) as raw value × 10.
11. Useful Zenoss CLI Commands
Check Daemon Status
su - zenoss zenoss status # Relevant daemons for Didactum integration: # zenperfsnmp – SNMP polling # zentrap – SNMP trap reception # zenactions – Email notifications # zenmodeler – Device modeling
Test SNMP Connection
# snmpwalk – list all sensor values
snmpwalk -v 2c -c didactum_zenoss 192.168.1.50 \
.1.3.6.1.4.1.46501.5.1.1
# snmpget – query temperature value (raw value ÷ 10 = °C)
snmpget -v 2c -c didactum_zenoss 192.168.1.50 \
.1.3.6.1.4.1.46501.5.1.1.7.101001
# Expected output: INTEGER: 235 (=
23.5 °C)
# snmpget – leakage status
snmpget -v 2c -c didactum_zenoss 192.168.1.50 \
.1.3.6.1.4.1.46501.5.1.1.7.107001
# Expected output (dry): INTEGER: 0
# snmpget – sensor status
snmpget -v 2c -c didactum_zenoss 192.168.1.50 \
.1.3.6.1.4.1.46501.5.1.1.6.101001
# Expected output (OK): INTEGER: 0
Trigger Device Modeling Manually
zenmodeler run -d 192.168.1.50 --debug tail -f /opt/zenoss/log/zenmodeler.log
Check SNMP Polling Status
zenperfsnmp run -d 192.168.1.50 --debug tail -f /opt/zenoss/log/zenperfsnmp.log
Load MIB Manually
zenmib run /opt/zenoss/share/mibs/site/didactum.mib --debug
12. Troubleshooting and Solutions
| Problem | Cause & Solution |
|---|---|
| Device modeling fails | SNMP not enabled on the Didactum device; community string incorrect in zProperties; UDP port 161 blocked by firewall → test snmpwalk directly from the Zenoss server; check zProperties of the device class |
| zenmib reports error during MIB import | Dependent MIBs are missing (SNMPv2-SMI, RFC1213-MIB) → reference base MIBs from /opt/zenoss/share/mibs/; alternatively, use DIDACTUM-MIB.txt from section 3; zenmib run --debug for details |
| OID returns "No Such Object" | Wrong enterprise OID (46501 vs. 39052) → check sysObjectID via snmpwalk: snmpwalk -v 2c -c COMMUNITY IP .1.3.6.1.2.1.1.2.0 |
| Temperature value appears 10× too high | Not an error – Didactum delivers raw value × 10. Set Zenoss MinMaxThreshold Max Value as × 10 value (28 °C = 280). Adjust graph label to ÷10 = °C. |
| Threshold does not trigger an event | MinMaxThreshold logic: Alarm if value > Max Value. For binary sensors, set Max Value = 0. Is zenperfsnmp running? → zenoss status | grep zenperfsnmp |
| SNMP traps do not arrive in the Event Console | zentrap daemon not active → zenoss start zentrap; trap destination IP incorrect in the Didactum device; UDP port 162 blocked by firewall; trap community does not match → tail -f /opt/zenoss/log/zentrap.log |
| Trap event without event class mapping | Event lands in /Unknown instead of /Environmental/Didactum → create event class mapping for trap OID .1.3.6.1.4.1.46501.1.1 (section 6) |
| No email on alarm | zenactions daemon not active; SMTP configuration missing; trigger rule does not match; notification not active → zenoss status | grep zenactions; test trigger rule in the Web UI |
| Graphs show no data | First polling interval (default: 5 minutes) has not yet expired; datasource OID incorrect → check zenperfsnmp log; verify datasource OID in the template |
| Monitoring template is not applied | Template assigned to the wrong device class; device in the wrong device class → Devices → Didactum-Monitor-01 → check Device Class; bind template explicitly |
13. Final Checklist
Didactum Device
- SNMP enabled (v2c)
- Community string set (not "public"): didactum_zenoss
- Trap destination set to the IP of the Zenoss server
- Trap community set: didactum_trap
- MIB file downloaded (didactum.mib)
- snmpwalk from Zenoss server successful
Zenoss Server
- DIDACTUM-MIB copied to /opt/zenoss/share/mibs/site/ and compiled via zenmib
- MIB resolution verified in the Zenoss Web UI under Advanced → MIBs
- Device class /Devices/Environmental/Didactum created
- zProperties of the device class set (community, version, port)
- Device Didactum-Monitor-01 created and device modeling successful
- Monitoring template DidactumSensors created
- All 6 datasources (OIDs) created in the template
- All 8 thresholds created in the template
- Temperature thresholds set as raw value × 10 (Warning Max 280 / Critical Max 350)
- Binary sensor thresholds set with Max Value 0 (alarm if value > 0)
- Template assigned to the device class and bound to the device
- Event class /Environmental/Didactum created
- Event class mappings created for trap OIDs
- zentrap daemon active (UDP port 162)
- Trap community set in Zenoss Advanced → Settings
- Trigger and notification configured for email alert
- zenactions daemon active
Tests & Verification
- Device modeling completed (sysDescr appears in device details)
- Initial graph data available after one polling cycle (5 minutes)
- Temperature graph shows raw values (÷10 = °C)
- Test trap triggered via Didactum Web Interface → event appears in Event Console
- Event Class: /Environmental/Didactum (correctly assigned by mapping)
- Email received on test alarm
- Dashboard portlets show Didactum device status and events
- Threshold test: snmpwalk confirms raw value; manually set threshold above test value → event is generated