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

Didactum Monitoring & Munin Integration

Complete step-by-step guide for integrating Didactum Monitoring devices and sensors into Munin via SNMP – including plugin symlinks, plugin configuration, complete custom Perl plugin file for all sensor types (Temperature, Leakage, Humidity, Door Contact, Smoke) and email alerting.

Architecture Note: SNMP plugins are activated on the Munin node machine as an SNMP gateway. Both munin and munin-node run on this node. The SNMP plugins are activated via symlinks in /etc/munin/plugins, with the name of the host being monitored inserted between the first two underscores.

  • Software: Munin 2.x (munin-master + munin-node)
  • Plugin Language: Perl (Munin::Plugin::SNMP module)
  • Protocol: SNMP v1 / v2c / v3
  • Devices: Didactum Monitoring System 100T / 300T / 500T / 550T
  • Sensors: Temperature, Leakage, Humidity, Door Contact, Smoke

1. Prerequisites & System Overview

Munin Server

  • Ubuntu 20.04 / 22.04 LTS or Debian 11/12
  • munin and munin-node installed
  • Perl modules libsnmp-session-perl and libnet-snmp-perl installed
  • Packages: snmp, snmp-mibs-downloader
  • UDP Port 161 outbound for SNMP Polling opened
  • Network access to the Didactum device

Didactum Device

  • Monitoring System 100T, 300T, 500T or 550T
  • SNMP enabled (v2c recommended)
  • Device reachable via network from the Munin server
  • MIB file available in the Web Interface

Important Munin Directories

/etc/munin/munin.conf <-- Main configuration (hosts, groups)
/etc/munin/plugin-conf.d/ <-- Plugin-specific configuration (Community, Env variables)
/etc/munin/plugins/ <-- Active plugins (symlinks)
/usr/share/munin/plugins/ <-- Supplied plugins
/usr/local/share/munin/plugins/ <-- Place custom plugins here
/var/lib/munin/ <-- RRD database and graphs
/var/log/munin/ <-- Log files

Munin SNMP Plugin Naming Convention

SNMP plugins are named in the format snmp_HOSTNAME_METRIC. The hostname of the device being monitored is inserted between the first two underscores. Example: snmp_didactum01_temperature monitors the temperature of the device named "didactum01".

2. Enable SNMP on the Didactum Device

Step 1 – Open Web Interface

Open in browser: 192.168.1.50 (adjust Didactum device IP)

Step 2 – Access SNMP Settings

System Settings → SNMP

Step 3 – Enter the following values

Field in Didactum Web InterfaceValue
Enable SNMPEnabled
SNMP Versionv2c (recommended)
Community Stringdidactum_munin (do not use „public"!)
SNMP Port161

Save settings.

3. Install Packages & Test SNMP

sudo apt update
sudo apt install -y munin munin-node \
    libnet-snmp-perl libsnmp-session-perl \
    snmp snmp-mibs-downloader
# Test SNMP connection to the Didactum device
snmpwalk -v 2c -c didactum_munin 192.168.1.50 \
    .1.3.6.1.4.1.46501.5.1.1
# Query single temperature value (raw value ÷ 10 = degrees Celsius)
snmpget -v 2c -c didactum_munin 192.168.1.50 \
    .1.3.6.1.4.1.46501.5.1.1.7.101001

4. Install MIB File

# Download MIB from Didactum Web Interface:
# System Settings → SNMP → "Download MIB File" → didactum.mib
sudo cp didactum.mib /usr/share/snmp/mibs/
echo "mibdirs /usr/share/snmp/mibs" | sudo tee -a /etc/snmp/snmp.conf
echo "mibs ALL" | sudo tee -a /etc/snmp/snmp.conf
# Test with MIB names
snmpwalk -v 2c -c didactum_munin -m ALL 192.168.1.50 \
    DIDACTUM-MIB::sensorValue

5. Munin Host Configuration for Didactum

The Didactum device is entered in munin.conf as a standalone host. Since munin-node performs the SNMP queries through itself as a gateway, address 127.0.0.1 (localhost) is entered as the address of the munin-node.

sudo nano /etc/munin/munin.conf
# ================================================================
# Didactum Monitoring System – Munin Host Configuration
# ================================================================
[Didactum]
    # Didactum Monitoring System 01
    # address = localhost, because munin-node acts as SNMP gateway
    [Didactum;didactum-monitor-01]
        address 127.0.0.1
        use_node_name no

6. SNMP Plugin Configuration

As a rule, SNMP plugins require site-specific configuration. The default configuration only works on insecure devices. The community string of the devices should not be „public".

sudo nano /etc/munin/plugin-conf.d/didactum
# ================================================================
# Didactum SNMP Plugin Configuration
# File: /etc/munin/plugin-conf.d/didactum
# ================================================================
# Applies to all plugins of the Didactum device
[snmp_didactum-monitor-01_*]
    env.host 192.168.1.50
    env.port 161
    env.version 2
    env.community didactum_munin
    env.timeout 5
# Temperature sensor specific
[snmp_didactum-monitor-01_didactum_temp]
    env.host 192.168.1.50
    env.community didactum_munin
    env.version 2
    env.warning 280
    env.critical 350
# Leakage sensor specific
[snmp_didactum-monitor-01_didactum_leak]
    env.host 192.168.1.50
    env.community didactum_munin
    env.version 2
    env.critical 1
# Humidity specific
[snmp_didactum-monitor-01_didactum_humidity]
    env.host 192.168.1.50
    env.community didactum_munin
    env.version 2
    env.warning 80
    env.critical 90

7. Custom Perl Plugin for Didactum Sensors

The following plugin monitors all Didactum sensors in a single plugin. It follows the official Munin SNMP plugin standard with magic markers and the Munin::Plugin::SNMP module.

Create Plugin File

sudo nano /usr/local/share/munin/plugins/snmp__didactum_sensors
#!/usr/bin/perl
# ================================================================
# Munin SNMP Plugin – Didactum Monitoring System
# File: /usr/local/share/munin/plugins/snmp__didactum_sensors
#
# Monitors: Temperature sensor, Leakage, Humidity,
# Door contact, Smoke detector via SNMPv2c
#
# Enterprise OID (older devices): .1.3.6.1.4.1.46501
# Enterprise OID (newer devices): .1.3.6.1.4.1.39052
#
# Configuration in /etc/munin/plugin-conf.d/:
# [snmp_HOSTNAME_didactum_sensors]
# env.host 192.168.1.50
# env.community didactum_munin
# env.version 2
# env.warning_temp 280 (= 28.0 degrees C – raw value x10)
# env.critical_temp 350 (= 35.0 degrees C – raw value x10)
#
# IMPORTANT – Temperature thresholds:
# Didactum delivers temperature as raw value x10.
# 25.5 degrees C = OID value 255.
# Configure warning/critical as raw value x10!
#
# =head1 MAGIC MARKERS
#%# family=snmpauto
#%# capabilities=snmpconf
# ================================================================
use strict;
use warnings;
use Net::SNMP;
use Munin::Plugin;
# ================================================================
# OID definitions
# ================================================================
my $base_oid_old = '1.3.6.1.4.1.46501.5.1.1'; # older devices
my $base_oid_new = '1.3.6.1.4.1.39052.5.1.1'; # newer devices
# Sensor OIDs (adjust sensor ID at the end!)
my %oids = (
    'temp_value' => '1.3.6.1.4.1.46501.5.1.1.7.101001',
    'temp_status' => '1.3.6.1.4.1.46501.5.1.1.6.101001',
    'leak_value' => '1.3.6.1.4.1.46501.5.1.1.7.107001',
    'humidity_value'=> '1.3.6.1.4.1.46501.5.1.1.7.102001',
    'door_value' => '1.3.6.1.4.1.46501.5.1.1.7.104001',
    'smoke_value' => '1.3.6.1.4.1.46501.5.1.1.7.106001',
);
# ================================================================
# Environment variables (from plugin-conf.d)
# ================================================================
my $host = $ENV{host} || '192.168.1.50';
my $port = $ENV{port} || 161;
my $version = $ENV{version} || '2';
my $community = $ENV{community} || 'public';
my $timeout = $ENV{timeout} || 5;
my $warn_temp = $ENV{warning_temp} || 280;
my $crit_temp = $ENV{critical_temp} || 350;
my $warn_hum = $ENV{warning_hum} || 80;
my $crit_hum = $ENV{critical_hum} || 90;
# ================================================================
# snmpconf – for munin-node-configure auto-detection
# ================================================================
if (defined $ARGV[0] and $ARGV[0] eq 'snmpconf') {
    # Device detection: check Didactum sysObjectID
    print "require 1.3.6.1.4.1.46501.5.1.1.7.101001\n";
    exit 0;
}
# ================================================================
# Establish SNMP connection
# ================================================================
my ($session, $error) = Net::SNMP->session(
    -hostname => $host,
    -port => $port,
    -version => $version,
    -community => $community,
    -timeout => $timeout,
);
if (!defined $session) {
    die "# Error: SNMP connection to $host failed: $error\n";
}
# Query OIDs
my $result = $session->get_request(
    -varbindlist => [ values %oids ]
);
if (!defined $result) {
    die "# Error: SNMP query failed: " . $session->error() . "\n";
}
$session->close();
# ================================================================
# config – Munin graph configuration
# ================================================================
if (defined $ARGV[0] and $ARGV[0] eq 'config') {
    print "host_name $host\n";
    # --- Temperature Graph ---
    print "multigraph didactum_temperature\n";
    print "graph_title Didactum Temperature Sensor 01\n";
    print "graph_vlabel Degrees Celsius\n";
    print "graph_category sensors\n";
    print "graph_info Temperature Sensor 01 (raw value divided by 10 = degrees Celsius)\n";
    print "temp.label Temperature\n";
    print "temp.type GAUGE\n";
    print "temp.draw LINE2\n";
    print "temp.colour 0000FF\n";
    print "temp.warning $warn_temp\n";
    print "temp.critical $crit_temp\n";
    print "temp.info Raw value of the temperature sensor (x0.1 = degrees C). Warning: " .
          ($warn_temp/10) . " C, Critical: " . ($crit_temp/10) . " C\n";
    # --- Temperature Status Graph ---
    print "multigraph didactum_temp_status\n";
    print "graph_title Didactum Temp Sensor Status\n";
    print "graph_vlabel Status\n";
    print "graph_category sensors\n";
    print "graph_info Sensor status: 0=OK, 1=Alarm, 2=No Signal\n";
    print "status.label Status\n";
    print "status.type GAUGE\n";
    print "status.draw LINE1\n";
    print "status.warning 0.5\n";
    print "status.critical 1.5\n";
    # --- Leakage Graph ---
    print "multigraph didactum_leakage\n";
    print "graph_title Didactum Leakage Sensor 01\n";
    print "graph_vlabel State\n";
    print "graph_category sensors\n";
    print "graph_info Leakage sensor: 0=dry, 1=water detected\n";
    print "leak.label Leakage\n";
    print "leak.type GAUGE\n";
    print "leak.draw AREA\n";
    print "leak.colour FF0000\n";
    print "leak.critical 0.5\n";
    print "leak.info 0 = dry (OK), 1 = water detected (CRITICAL)\n";
    # --- Humidity Graph ---
    print "multigraph didactum_humidity\n";
    print "graph_title Didactum Humidity Sensor 01\n";
    print "graph_vlabel Percent (%)\n";
    print "graph_category sensors\n";
    print "humidity.label Humidity\n";
    print "humidity.type GAUGE\n";
    print "humidity.draw LINE2\n";
    print "humidity.colour 00AAFF\n";
    print "humidity.warning $warn_hum\n";
    print "humidity.critical $crit_hum\n";
    print "humidity.min 0\n";
    print "humidity.max 100\n";
    # --- Door Contact Graph ---
    print "multigraph didactum_door\n";
    print "graph_title Didactum Door Contact 01\n";
    print "graph_vlabel State\n";
    print "graph_category sensors\n";
    print "door.label Door Contact\n";
    print "door.type GAUGE\n";
    print "door.draw AREA\n";
    print "door.warning 0.5\n";
    print "door.info 0 = closed (OK), 1 = open (Warning)\n";
    # --- Smoke Detector Graph ---
    print "multigraph didactum_smoke\n";
    print "graph_title Didactum Smoke Detector 01\n";
    print "graph_vlabel State\n";
    print "graph_category sensors\n";
    print "smoke.label Smoke Detector\n";
    print "smoke.type GAUGE\n";
    print "smoke.draw AREA\n";
    print "smoke.colour FF6600\n";
    print "smoke.critical 0.5\n";
    print "smoke.info 0 = no smoke (OK), 1 = Alarm (CRITICAL)\n";
    exit 0;
}
# ================================================================
# Output values (normal plugin run)
# ================================================================
# Read raw values from SNMP result
my $temp_raw = $result->{$oids{temp_value}} // 'U';
my $temp_status = $result->{$oids{temp_status}} // 'U';
my $leak_val = $result->{$oids{leak_value}} // 'U';
my $humidity_val = $result->{$oids{humidity_value}} // 'U';
my $door_val = $result->{$oids{door_value}} // 'U';
my $smoke_val = $result->{$oids{smoke_value}} // 'U';
# Temperature: output raw value (warning/critical set on raw value x10)
print "multigraph didactum_temperature\n";
print "temp.value $temp_raw\n";
# Temperature Status
print "multigraph didactum_temp_status\n";
print "status.value $temp_status\n";
# Leakage
print "multigraph didactum_leakage\n";
print "leak.value $leak_val\n";
# Humidity
print "multigraph didactum_humidity\n";
print "humidity.value $humidity_val\n";
# Door Contact
print "multigraph didactum_door\n";
print "door.value $door_val\n";
# Smoke Detector
print "multigraph didactum_smoke\n";
print "smoke.value $smoke_val\n";
exit 0;
sudo chmod +x /usr/local/share/munin/plugins/snmp__didactum_sensors

8. Create Plugin Symlinks

To activate SNMP plugins, they are created as symlinks in /etc/munin/plugins, with the name of the host being monitored inserted between the first two underscores.

Create Symlink for the Custom Plugin

# Activate plugin for Didactum-Monitor-01
sudo ln -s /usr/local/share/munin/plugins/snmp__didactum_sensors \
           /etc/munin/plugins/snmp_didactum-monitor-01_didactum_sensors
# Check plugin list
ls -la /etc/munin/plugins/ | grep didactum

Test Plugin directly (before restarting munin-node)

# Test plugin configuration
sudo munin-run snmp_didactum-monitor-01_didactum_sensors config
# Test plugin values (normal run)
sudo munin-run snmp_didactum-monitor-01_didactum_sensors
# Expected output:
# multigraph didactum_temperature
# temp.value 235
# multigraph didactum_leakage
# leak.value 0
# ...

Restart munin-node

sudo systemctl restart munin-node
sudo systemctl status munin-node

munin-node-configure for automatic plugin detection (optional)

The munin-node-configure script can automatically check which SNMP plugins are available for a device.

# Automatically determine available plugins for Didactum device
sudo munin-node-configure --shell \
    --snmp 192.168.1.50 \
    --snmpversion 2c \
    --snmpcommunity didactum_munin \
    --libdir /usr/local/share/munin/plugins

9. Configure Munin Alarms (Warn/Critical)

Munin can trigger alarms when warning or critical thresholds are exceeded. Thresholds are defined either directly in the plugin (warning/critical lines in the config section) or in the plugin configuration file.

Set thresholds in the plugin configuration file

sudo nano /etc/munin/plugin-conf.d/didactum
# ================================================================
# Didactum Plugin Configuration – Thresholds
# IMPORTANT: Specify temperature thresholds as raw value x10!
# 28 degrees C = 280, 35 degrees C = 350
# ================================================================
[snmp_didactum-monitor-01_didactum_sensors]
    env.host 192.168.1.50
    env.port 161
    env.version 2
    env.community didactum_munin
    env.timeout 5
    # Temperature thresholds (raw value x10!)
    env.warning_temp 280
    env.critical_temp 350
    # Humidity thresholds (direct in %)
    env.warning_hum 80
    env.critical_hum 90

Override individual data point thresholds in munin.conf

sudo nano /etc/munin/munin.conf
[Didactum;didactum-monitor-01]
    address 127.0.0.1
    use_node_name no
    # Override individual data point thresholds (optional)
    # Format: Plugin.Datapoint.warning / .critical
    snmp_didactum-monitor-01_didactum_sensors.temp.warning 280
    snmp_didactum-monitor-01_didactum_sensors.temp.critical 350
    snmp_didactum-monitor-01_didactum_sensors.leak.critical 0.5
    snmp_didactum-monitor-01_didactum_sensors.smoke.critical 0.5

10. Configure Email Notification

Munin sends notifications via the contacts system. An email is sent when a warning or critical threshold is exceeded.

Step 1 – Configure Munin notification in munin.conf

sudo nano /etc/munin/munin.conf
# ================================================================
# Munin Notification Configuration for Didactum Alarms
# ================================================================
# Define contact
contact.admin.command mail -s "Munin: ${var:host} – ${var:plugin}: ${var:state}" \
    admin@yourdomain.com
# Email format
contact.admin.text \
    Timestamp: ${var:timestamp}\n\
    Host: ${var:host}\n\
    Plugin: ${var:plugin}\n\
    Datapoint: ${var:graph_title} – ${var:fieldname}\n\
    Status: ${var:state}\n\
    Value: ${var:value}\n\
    Warning from: ${var:warnhi}\n\
    Critical from: ${var:crithi}\n\
    Graph URL: ${var:url}
# Enable notifications (WARNING and CRITICAL)
contact.admin.always_send warning critical
# Enable notifications for Didactum host
[Didactum;didactum-monitor-01]
    address 127.0.0.1
    use_node_name no
    contacts admin

Step 2 – Install Postfix for local mail delivery

sudo apt install postfix mailutils -y
# Configuration type: "Internet Site"
# Test:
echo "Test Munin Didactum" | mail -s "Test" admin@yourdomain.com

Step 3 – Restart munin-master

sudo systemctl restart munin-node
# Munin usually runs via Cron – check:
sudo crontab -l -u munin
# Default: */5 * * * * /usr/bin/munin-cron

11. SNMP OID Reference

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

FieldMeaningExample
.1.x.SENSOR_IDSensor ID1.3.6.1.4.1.46501.5.1.1.1.101001
.5.x.SENSOR_IDSensor Name1.3.6.1.4.1.46501.5.1.1.5.101001
.6.x.SENSOR_IDStatus (0=OK, 1=Alarm, 2=No Signal)1.3.6.1.4.1.46501.5.1.1.6.101001
.7.x.SENSOR_IDMeasured value (current)1.3.6.1.4.1.46501.5.1.1.7.101001

Sensor types with OIDs and Munin thresholds

Sensor TypeSensor IDOID Measured ValueOID StatusMunin Threshold
Temperature Sensor (digital)1010011.3.6.1.4.1.46501.5.1.1.7.1010011.3.6.1.4.1.46501.5.1.1.6.101001warning 280 / critical 350 (raw value × 10)
Temperature Sensor (analog)2010011.3.6.1.4.1.39052.5.2.1.7.2010011.3.6.1.4.1.39052.5.2.1.6.201001warning 280 / critical 350 (× 10)
Water Sensor / Leakage1070011.3.6.1.4.1.46501.5.1.1.7.1070011.3.6.1.4.1.46501.5.1.1.6.107001critical 0.5 (from 1 = water)
Humidity1020011.3.6.1.4.1.46501.5.1.1.7.1020011.3.6.1.4.1.46501.5.1.1.6.102001warning 80 / critical 90 (direct %)
Dry Contact1010031.3.6.1.4.1.39052.5.1.1.7.1010031.3.6.1.4.1.39052.5.1.1.6.101003warning 0.5 (from 1 = active)
Door Contact1040011.3.6.1.4.1.46501.5.1.1.7.1040011.3.6.1.4.1.46501.5.1.1.6.104001warning 0.5 (from 1 = open)
Smoke Detector1060011.3.6.1.4.1.46501.5.1.1.7.1060011.3.6.1.4.1.46501.5.1.1.6.106001critical 0.5 (from 1 = alarm)

Find Sensor ID: In the Didactum Web Interface under System Tree → Select Sensor → Details. This ID is appended to the end of the OID and updated in the %oids hash table in the plugin.

Temperature thresholds in Munin: The Didactum device delivers temperature values as raw value × 10. 28.0 °C = OID value 280. Munin thresholds (warning/critical) must therefore also be specified × 10. The raw value appears in the graph; the graph label indicates the ÷10 conversion.

MIB Prefix per model: Older devices use 1.3.6.1.4.1.46501, newer models possibly 1.3.6.1.4.1.39052. Adjust the OIDs in the plugin code accordingly.

12. Test & Troubleshooting

Test Plugin directly

# Show plugin configuration (config mode)
sudo -u munin munin-run \
    snmp_didactum-monitor-01_didactum_sensors config
# Query plugin values (normal run)
sudo -u munin munin-run \
    snmp_didactum-monitor-01_didactum_sensors
# Expected output:
# multigraph didactum_temperature
# temp.value 235
# multigraph didactum_leakage
# leak.value 0
# multigraph didactum_humidity
# humidity.value 65
# multigraph didactum_door
# door.value 0
# multigraph didactum_smoke
# smoke.value 0

Test SNMP directly

snmpget -v 2c -c didactum_munin 192.168.1.50 \
    1.3.6.1.4.1.46501.5.1.1.7.101001
# Expected output: INTEGER: 235 (= 23.5 degrees C)
snmpget -v 2c -c didactum_munin 192.168.1.50 \
    1.3.6.1.4.1.46501.5.1.1.7.107001
# Expected output for dry sensor: INTEGER: 0

Run Munin Master manually

sudo -u munin munin-cron
# Graphs are generated under /var/cache/munin/www/
ls /var/cache/munin/www/Didactum/didactum-monitor-01/

Error Messages and Solutions

ProblemCause & Solution
Plugin returns „U" (unknown)SNMP connection failed → check Community String, IP, UDP 161
Perl error on plugin startMissing Perl modules → sudo apt install libnet-snmp-perl
Symlink not foundls -la /etc/munin/plugins/ | grep didactum – check symlink and recreate if necessary
Temperature value appears 10× too high in graphNot a problem – raw value × 10 is correct. Set thresholds also × 10 (280, 350)
No email on alarmPostfix not running; contacts configuration missing; munin-cron not running
Graph does not appear in web interfacemunin-cron has not run yet; plugin returns „U" → wait 5 minutes
Plugin file: „Permission denied"sudo chmod +x /usr/local/share/munin/plugins/snmp__didactum_sensors

View Munin Logs

# Munin Master Log
sudo tail -f /var/log/munin/munin-update.log
# Munin Node Log
sudo tail -f /var/log/munin/munin-node.log
# Alarm Log
sudo tail -f /var/log/munin/munin-limits.log

13. Final Checklist

Didactum Device

  • SNMP enabled (v2c)
  • Community String set (not „public"): didactum_munin
  • snmpwalk from Munin server successful
  • MIB file downloaded

Munin Server

  • Packages munin, munin-node, libnet-snmp-perl installed
  • MIB file saved under /usr/share/snmp/mibs/
  • Plugin file /usr/local/share/munin/plugins/snmp__didactum_sensors created
  • Plugin file executable (chmod +x)
  • Symlink created in /etc/munin/plugins/
  • Plugin configuration set in /etc/munin/plugin-conf.d/didactum
  • munin.conf: Host entry and contacts created

Plugin Test

  • munin-run config: All graph definitions appear without errors
  • munin-run (normal run): All sensor values are returned (no „U")
  • munin-node restarted
  • munin-cron executed manually once
  • Graphs visible in web interface

Alarms & Notification

  • Temperature thresholds set as raw value × 10 (280 / 350)
  • Leakage critical threshold: 0.5
  • Postfix installed and test email received
  • contacts configured in munin.conf
  • Test alarm triggered and email received

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.