Didactum Monitoring & TclMon Integration
Complete step-by-step guide for integrating Didactum monitoring devices and sensors into TclMon via SNMP – including installation, dependencies, configuration files, SNMP object definition, RRD data storage, alarm configuration, e-mail notification, and Netstate client visualization.
Product Note: TclMon is a platform-independent open-source network monitoring system implemented entirely in the scripting language Tcl.
It consists of a server process that collects SNMP data from network devices and stores it in RRD databases, as well as the Netstate client, which provides a graphical representation of the collected data and alarms.
TclMon uses the thread-safe Tclsnmp library for all SNMP v1/v2c/v3 queries. The configuration of devices and OIDs is performed exclusively via text configuration files (objects.conf and tclmon.conf).
Didactum environmental sensors are fully integrated as user-defined SNMP objects.
- Software: TclMon (Open Source, SourceForge) + Netstate Client
- Platform: Linux (Debian / Ubuntu / RHEL / CentOS)
- Protocol: SNMP v1 / v2c / v3 (via Tclsnmp)
- Devices: Didactum Monitoring System 100T / 300T / 500 / 550T
- Sensors: Temperature, Leakage, Humidity, Door Contact, Smoke
1. Prerequisites & System Overview
TclMon Server
- Linux Server (Debian 10+, Ubuntu 20.04+, RHEL/CentOS 7+)
- Tcl 8.5 or higher installed
- The following Tcl packages available: Thread, Tclsnmp, Tclsyslog, Rrd, ip, dns, time
- RRDtool installed (for data storage and graphs)
- fping installed (for ICMP availability check)
- UDP port 161 open outbound for SNMP polling
- Network access from the TclMon server to the Didactum device
Didactum Device
- Monitoring System 100, 300, 500 or 550T
- SNMP activated (v2c recommended)
- Device reachable via ICMP from the TclMon server
- MIB file available in the web interface (download under Preferences → SNMP)
Architecture & Data Flow
[TclMon Server] [Didactum Monitoring System]
Linux Server IP: 192.168.1.50
tclmon-server (Tcl process)
RRD database (historical data)
Netstate Client (visualization)
-- SNMP GET/WALK UDP 161 (Tclsnmp) -->
<-- INTEGER values (sensor values) --------
TclMon Architecture
- tclmon-server: Main process in Tcl; reads configuration files; starts thread-based SNMP polling; stores data in RRD databases; evaluates alarm states
- Tclsnmp: Thread-safe SNMP library for Tcl; supports SNMP v1/v2c/v3 Get, GetNext, Walk, Trap
- Tclsyslog: Thread-safe Syslog library; used for alarm logging
- RRDtool: Round-Robin Database for long-term storage of time-series data (temperatures, measured values)
- Netstate Client: Graphical visualization application; shows current status, alarms, and historical graphs
2. Installing TclMon
Step 1 – Installing System Dependencies
# Debian / Ubuntu
sudo apt update
sudo apt install tcl tcl-thread tcllib rrdtool fping \
libsnmp-dev snmp snmp-mibs-downloader
# RHEL / CentOS / Rocky
sudo dnf install tcl tcl-thread tcllib rrdtool fping \
net-snmp net-snmp-utils net-snmp-devel
Step 2 – Installing Tclsnmp and Tclsyslog
# Download Tclsnmp and Tclsyslog from SourceForge # sourceforge.net/projects/tclmon/ # Extract archives to the Tcl library directory # Determine Tcl library path: tclsh % puts [join [lsearch -inline -all [info library] *] \n] % exit # Typically: /usr/lib/tcl8.6/ or /usr/local/lib/tcl8.6/ # Extract Tclsnmp: sudo tar xzf tclsnmp-*.tar.gz -C /usr/lib/tcl8.6/ # Extract Tclsyslog: sudo tar xzf tclsyslog-*.tar.gz -C /usr/lib/tcl8.6/ # Correct pkgIndex.tcl path if necessary: sudo vi /usr/lib/tcl8.6/tclsnmp/pkgIndex.tcl
Step 3 – Testing Tcl Packages
# All required packages must be loadable: tclsh % package require Thread % package require Syslog % package require Tclsnmp % package require Rrd % package require ip % package require dns % package require time % exit # No error = all packages available
Step 4 – Creating TclMon User and Extracting Archive
# Create user sudo useradd -m -d /home/tclmon -s /bin/bash tclmon # Download and extract TclMon archive # sourceforge.net/projects/tclmon/ sudo tar xzf tclmon-*.tar.gz -C /home/tclmon/ sudo chown -R tclmon:tclmon /home/tclmon/ # Change to the TclMon directory cd /home/tclmon/tclmon/
Step 5 – Adjusting TclMon Base Variables
# Adjust in the main configuration file: vi /home/tclmon/tclmon/tclmon.conf # Check and adjust the following variables if necessary: CONFIG(ROOT_DIR) /home/tclmon/tclmon CONFIG(RSH_BINARY) /usr/bin/rsh CONFIG(FPING_BINARY) /usr/bin/fping CONFIG(ALARMS_SERVER_MAIL_NOTIFY_SENDER) tclmon@yourdomain.de CONFIG(ALARMS_SERVER_MAIL_NOTIFY_RCPT) admin@yourdomain.de CONFIG(ALARMS_SERVER_MAIL_NOTIFY_SUBJECT) [TclMon ALARM] %object% - %parameter%
3. Activating SNMP on the Didactum Device
Step 1 – Opening the Didactum Web Interface
Access in browser: 192.168.1.50 (adjust IP of the Didactum device)
Step 2 – Opening SNMP Settings
Preferences → SNMP
Step 3 – Entering the Following Values
| Field in Didactum Web Interface | Value |
|---|---|
| Enable SNMP | Enabled |
| SNMP Version | v2c (recommended) |
| Community String | didactum_tcl (do not use "public"!) |
| SNMP Port | 161 |
Save settings. Test SNMP connection:
# From the TclMon server: snmpwalk -v2c -c didactum_tcl 192.168.1.50 .1.3.6.1.4.1.46501.5.1.1 # All sensor readings snmpwalk -v2c -c didactum_tcl 192.168.1.50 .1.3.6.1.4.1.46501.5.1.1.7 # All sensor names snmpwalk -v2c -c didactum_tcl 192.168.1.50 .1.3.6.1.4.1.46501.5.1.1.5
Determining Sensor IDs via snmpwalk
# The sensor ID is the last number in the OID (e.g., 101001) # Output example: # .1.3.6.1.4.1.46501.5.1.1.5.101001 = STRING: "Temperature Server Room" # .1.3.6.1.4.1.46501.5.1.1.7.101001 = INTEGER: 215 (= 21.5 degrees C) # .1.3.6.1.4.1.46501.5.1.1.7.107001 = INTEGER: 0 (= dry)
4. OID Reference for Didactum Sensors
All Didactum OIDs begin with .1.3.6.1.4.1.46501. The sensor ID at the end is determined via snmpwalk.
OID Fields per Sensor
| Field | Meaning | Example OID |
|---|---|---|
| .5.x.SENSOR_ID | Sensor Name (String) | .1.3.6.1.4.1.46501.5.1.1.5.101001 |
| .6.x.SENSOR_ID | Status: 0=Normal, 1=Warning, 2=Critical, 3=Error | .1.3.6.1.4.1.46501.5.1.1.6.101001 |
| .7.x.SENSOR_ID | Measurement (Current) | .1.3.6.1.4.1.46501.5.1.1.7.101001 |
Sensor Types with OIDs and Scaling
| Sensor Type | Sensor ID | OID Value | Scaling | Alarm Threshold |
|---|---|---|---|---|
| Temperature Sensor Port 1 | 101001 | .1.3.6.1.4.1.46501.5.1.1.7.101001 | Raw value ÷ 10 = °C (215 = 21.5 °C) | Warn: > 280 / Crit: > 350 |
| Temperature Sensor Port 2 | 101002 | .1.3.6.1.4.1.46501.5.1.1.7.101002 | Raw value ÷ 10 = °C | Warn: > 280 / Crit: > 350 |
| Humidity Sensor Port 1 | 102001 | .1.3.6.1.4.1.46501.5.1.1.7.102001 | Direct value = %rH | Warn: > 80 / Crit: > 90 |
| Combined Sensor Temp (CAN) | 103001 | .1.3.6.1.4.1.46501.5.1.1.7.103001 | Raw value ÷ 10 = °C | Warn: > 280 / Crit: > 350 |
| Combined Sensor Humidity (CAN) | 103002 | .1.3.6.1.4.1.46501.5.1.1.7.103002 | Direct value = %rH | Warn: > 80 / Crit: > 90 |
| Door Contact | 104001 | .1.3.6.1.4.1.46501.5.1.1.7.104001 | 0 = closed, 1 = open | Warn: > 0 |
| Smoke Detector | 106001 | .1.3.6.1.4.1.46501.5.1.1.7.106001 | 0 = OK, 1 = Alarm | Crit: > 0 |
| Leakage Sensor (Spot) | 107001 | .1.3.6.1.4.1.46501.5.1.1.7.107001 | 0 = dry, 1 = water | Crit: > 0 |
| Leakage Sensor (Cable) | 107002 | .1.3.6.1.4.1.46501.5.1.1.7.107002 | 0 = dry, 1 = water | Crit: > 0 |
| System Status (Device Total) | – | .1.3.6.1.4.1.46501.1.1.0 | 0 = OK, 1 = Warning, 2 = Critical | Warn: > 0 / Crit: > 1 |
Important Note – Temperature Thresholds: TclMon compares the SNMP raw value directly. Since Didactum provides temperatures as raw value × 10 (215 = 21.5 °C), all thresholds must also be specified × 10. 28 °C warning = threshold 280.
5. TclMon Configuration File – Defining Didactum Objects
TclMon is managed entirely via text configuration files. The Didactum device is defined in objects.conf as an SNMP object with its OIDs. TclMon automatically detects available parameters and keeps the list up to date.
File: /home/tclmon/tclmon/objects.conf
# ================================================================
# TclMon object configuration for Didactum Monitoring System
# Didactum Enterprise OID: 1.3.6.1.4.1.46501
# ================================================================
# ----------------------------------------------------------------
# Object: Didactum Monitoring System Server Room
# ----------------------------------------------------------------
object didactum_serverraum {
# Basic connection parameters
address 192.168.1.50
description "Didactum Monitoring System Server Room"
location "Server Room"
contact "admin@yourdomain.de"
# SNMP parameters
snmp_version 2c
snmp_community didactum_tcl
snmp_port 161
snmp_timeout 5000
snmp_retries 3
# Polling interval (seconds)
poll_interval 300
# ICMP availability check
ping_enabled 1
ping_interval 60
# SNMP methods for collection
methods { snmp_custom rrd_store }
# -------- User-defined SNMP parameters --------
# Temperature sensor Port 1 (Raw value; 215 = 21.5 Grad C)
custom_oid Temperatur_Sensor_01 {
oid .1.3.6.1.4.1.46501.5.1.1.7.101001
type gauge
scale 0.1
unit "Deg C"
warn_high 280
crit_high 350
rrd_store 1
}
# Temperature sensor Port 2
custom_oid Temperatur_Sensor_02 {
oid .1.3.6.1.4.1.46501.5.1.1.7.101002
type gauge
scale 0.1
unit "Deg C"
warn_high 280
crit_high 350
rrd_store 1
}
# Humidity sensor Port 1
custom_oid Luftfeuchte_Sensor_01 {
oid .1.3.6.1.4.1.46501.5.1.1.7.102001
type gauge
scale 1
unit "%rH"
warn_high 80
crit_high 90
rrd_store 1
}
# Leakage sensor Spot (0=dry 1=water detected)
custom_oid Leckage_Sensor_01 {
oid .1.3.6.1.4.1.46501.5.1.1.7.107001
type gauge
scale 1
unit "Status"
crit_high 0
rrd_store 1
poll_interval 120
}
# Leakage sensor Cable
custom_oid Leckage_Sensor_02 {
oid .1.3.6.1.4.1.46501.5.1.1.7.107002
type gauge
scale 1
unit "Status"
crit_high 0
rrd_store 1
poll_interval 120
}
# Door contact (0=closed 1=open)
custom_oid Tuerkontakt_01 {
oid .1.3.6.1.4.1.46501.5.1.1.7.104001
type gauge
scale 1
unit "Status"
warn_high 0
rrd_store 1
poll_interval 60
}
# Smoke detector (0=OK 1=Alarm)
custom_oid Rauchmelder_01 {
oid .1.3.6.1.4.1.46501.5.1.1.7.106001
type gauge
scale 1
unit "Status"
crit_high 0
rrd_store 1
poll_interval 60
}
# Sensor status (0=Normal 1=Warning 2=Critical 3=Error)
custom_oid Sensor_Status_01 {
oid .1.3.6.1.4.1.46501.5.1.1.6.101001
type gauge
scale 1
unit "Status"
warn_high 0
crit_high 1
rrd_store 1
}
# System status device total (0=OK 1=Warn 2=Crit)
custom_oid Geraet_Systemzustand {
oid .1.3.6.1.4.1.46501.1.1.0
type gauge
scale 1
unit "Status"
warn_high 0
crit_high 1
rrd_store 1
}
}
6. TclMon Main Configuration (tclmon.conf)
The main configuration file controls the TclMon server process, alarm behavior, mail delivery, and logging.
File: /home/tclmon/tclmon/tclmon.conf (Relevant sections)
# ================================================================
# TclMon Main Configuration (Excerpt for Didactum integration)
# ================================================================
# ---- Server paths ----
set CONFIG(ROOT_DIR) /home/tclmon/tclmon
set CONFIG(RRD_DIR) /home/tclmon/tclmon/rrd
set CONFIG(LOG_DIR) /home/tclmon/tclmon/log
set CONFIG(CONF_DIR) /home/tclmon/tclmon/conf
# ---- External binaries ----
set CONFIG(FPING_BINARY) /usr/bin/fping
set CONFIG(RSH_BINARY) /usr/bin/rsh
set CONFIG(RRDTOOL_BINARY) /usr/bin/rrdtool
# ---- SNMP standard values ----
set CONFIG(SNMP_DEFAULT_VERSION) 2c
set CONFIG(SNMP_DEFAULT_TIMEOUT) 5000
set CONFIG(SNMP_DEFAULT_RETRIES) 3
# ---- Alarm server settings ----
set CONFIG(ALARMS_SERVER_ENABLED) 1
set CONFIG(ALARMS_SERVER_PORT) 9001
# ---- E-Mail alerting ----
set CONFIG(MAIL_NOTIFY_ENABLED) 1
set CONFIG(MAIL_SENDER) tclmon@yourdomain.de
set CONFIG(MAIL_RCPT) admin@yourdomain.de
set CONFIG(MAIL_RCPT_CRITICAL) admin@yourdomain.de,notfall@yourdomain.de
set CONFIG(MAIL_SUBJECT_WARN) {[TclMon WARNING] %object% - %param% = %value%}
set CONFIG(MAIL_SUBJECT_CRIT) {[TclMon CRITICAL] %object% - %param% = %value%}
set CONFIG(MAIL_SUBJECT_RECOVER) {[TclMon OK] %object% - %param% normalized}
# ---- Syslog logging ----
set CONFIG(SYSLOG_ENABLED) 1
set CONFIG(SYSLOG_FACILITY) local0
set CONFIG(SYSLOG_LEVEL_WARN) warning
set CONFIG(SYSLOG_LEVEL_CRIT) critical
# ---- Thread settings (scaling) ----
set CONFIG(THREAD_POOL_SIZE) 10
set CONFIG(POLLER_THREADS) 5
# ---- Alarm suppression (Maintenance Window) ----
# Period in Cron syntax: "Minute Hour Day Month Weekday"
# Example: Maintenance Saturdays 02:00-04:00 AM
set CONFIG(MAINTENANCE_WINDOW) {0 2 * * 6}
set CONFIG(MAINTENANCE_DURATION) 7200
7. Verifying SNMP Polling with Tclsnmp
Before starting TclMon, the SNMP connection should be tested directly in the Tcl interpreter using the Tclsnmp package.
Interactive Tclsnmp Test
tclsh
# Load package
package require Tclsnmp
# Create SNMP session to Didactum device
set session [snmp::session -version 2c \
-community didactum_tcl \
-address 192.168.1.50 \
-port 161 \
-timeout 5000 \
-retries 3]
# Query temperature value (raw value)
set result [$session get .1.3.6.1.4.1.46501.5.1.1.7.101001]
puts "Temperature raw value: $result"
# Expected output: 215 (= 21.5 degrees Celsius)
# Query leakage sensor
set result [$session get .1.3.6.1.4.1.46501.5.1.1.7.107001]
puts "Leakage Status: $result"
# Expected output: 0 (= dry)
# Walk over all sensor readings
set results [$session walk .1.3.6.1.4.1.46501.5.1.1.7]
foreach {oid value} $results {
puts "$oid = $value"
}
# Close session
$session destroy
exit
Quick test via Shell Script
#!/usr/bin/env tclsh
# /usr/local/bin/didactum-snmp-test.tcl
# Didactum SNMP connection test for TclMon
package require Tclsnmp
set HOST "192.168.1.50"
set COMMUNITY "didactum_tcl"
set OIDS {
Temperatur_01 .1.3.6.1.4.1.46501.5.1.1.7.101001
Luftfeuchte_01 .1.3.6.1.4.1.46501.5.1.1.7.102001
Leckage_01 .1.3.6.1.4.1.46501.5.1.1.7.107001
Systemzustand .1.3.6.1.4.1.46501.1.1.0
}
set s [snmp::session -version 2c -community $COMMUNITY \
-address $HOST -port 161]
foreach {name oid} $OIDS {
if {[catch {set val [$s get $oid]} err]} {
puts "ERROR $name: $err"
} else {
puts "OK $name: $val"
}
}
$s destroy
chmod +x /usr/local/bin/didactum-snmp-test.tcl tclsh /usr/local/bin/didactum-snmp-test.tcl # Expected output: # OK Temperatur_01: 215 # OK Luftfeuchte_01: 58 # OK Leckage_01: 0 # OK Systemzustand: 0
8. Starting TclMon Server and Checking Operation
Step 1 – Starting TclMon Server Manually (Test)
su - tclmon cd /home/tclmon/tclmon tclsh tclmon-server.tcl & # Observe log output: tail -f /home/tclmon/tclmon/log/tclmon.log
Step 2 – Setting up TclMon as a System Service
# Create systemd service file: sudo vi /etc/systemd/system/tclmon.service
[Unit] Description=TclMon Network Monitoring Server After=network.target [Service] Type=simple User=tclmon WorkingDirectory=/home/tclmon/tclmon ExecStart=/usr/bin/tclsh /home/tclmon/tclmon/tclmon-server.tcl Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl enable tclmon sudo systemctl start tclmon sudo systemctl status tclmon
Step 3 – Checking Polling Status
# Query current status of all objects (plaintext protocol): echo "get_status didactum_serverraum" | nc localhost 9001 # Check RRD databases (after the first polling cycle): rrdtool info /home/tclmon/tclmon/rrd/didactum_serverraum_Temperatur_Sensor_01.rrd # Query last reading from RRD: rrdtool lastupdate /home/tclmon/tclmon/rrd/didactum_serverraum_Temperatur_Sensor_01.rrd
9. Alarm and E-Mail Configuration
TclMon evaluates all collected values against the defined thresholds and sends e-mails to the configured recipients when exceeded.
Configuring E-Mail Delivery
# In tclmon.conf, ensure that e-mail is configured correctly: # (SMTP is used via local sendmail or an SMTP relay) # Configure Postfix/sendmail as local mail relay: sudo apt install postfix mailutils # Relay configuration in /etc/postfix/main.cf: relayhost = [mail.yourdomain.de]:587 # Send test e-mail: echo "TclMon Test" | mail -s "[TclMon] Connection Test" admin@yourdomain.de
Alarm Rules in objects.conf (Summary)
| Object / OID | warn_high | crit_high | Poll Interval | E-Mail on |
|---|---|---|---|---|
| Temperatur_Sensor_01 | 280 (28 °C) | 350 (35 °C) | 300 sec. | Warning + Critical |
| Temperatur_Sensor_02 | 280 | 350 | 300 sec. | Warning + Critical |
| Luftfeuchte_Sensor_01 | 80 | 90 | 300 sec. | Warning + Critical |
| Leckage_Sensor_01 | – | 0 (from 1 = water) | 120 sec. | Critical |
| Leckage_Sensor_02 | – | 0 | 120 sec. | Critical |
| Tuerkontakt_01 | 0 (from 1 = open) | – | 60 sec. | Warning |
| Rauchmelder_01 | – | 0 (from 1 = Alarm) | 60 sec. | Critical |
| Geraet_Systemzustand | 0 | 1 | 300 sec. | Warning + Critical |
10. Configuring Netstate Client
The Netstate client is the graphical visualization component of TclMon. It connects to the TclMon server via the plaintext protocol and displays status, alarms, and historical graphs.
Installing Netstate
# Download Netstate archive from SourceForge # sourceforge.net/projects/tclmon/ tar xzf netstate-*.tar.gz cd netstate/ # Dependencies: Tcl/Tk with Wish sudo apt install tk # Debian/Ubuntu sudo dnf install tk # RHEL/CentOS
Configuring Netstate Connection
# In the Netstate configuration file: vi /home/tclmon/netstate/netstate.conf set NETSTATE(SERVER_HOST) localhost set NETSTATE(SERVER_PORT) 9001 set NETSTATE(UPDATE_INTERVAL) 30 set NETSTATE(RRD_DIR) /home/tclmon/tclmon/rrd
Starting Netstate
cd /home/tclmon/netstate wish netstate.tcl
In the Netstate window, the object didactum_serverraum appears with all configured parameters. Color-coded status display: Green = OK, Yellow = Warning, Red = Critical.
11. MIB Template for External SNMP Queries
-- ============================================================
-- DIDACTUM-ENV-MIB | Enterprise OID: 1.3.6.1.4.1.46501
-- ============================================================
DIDACTUM-ENV-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, OBJECT-TYPE, Integer32, enterprises
FROM SNMPv2-SMI
DisplayString
FROM SNMPv2-TC;
didactum MODULE-IDENTITY
LAST-UPDATED "202401010000Z"
ORGANIZATION "Didactum Security GmbH"
CONTACT-INFO "support@didactum-security.com"
DESCRIPTION "MIB for Didactum environmental monitoring systems"
::= { enterprises 46501 }
didactumSensors OBJECT IDENTIFIER ::= { didactum 5 }
didactumSensorTable OBJECT IDENTIFIER ::= { didactumSensors 1 }
didactumSensorEntry OBJECT IDENTIFIER ::= { didactumSensorTable 1 }
sensorName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Name of the sensor"
::= { didactumSensorEntry 5 }
sensorStatus OBJECT-TYPE
SYNTAX Integer32 (0..3)
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Status: 0=Normal 1=Warning 2=Critical 3=Error"
::= { didactumSensorEntry 6 }
sensorValue OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Measured value: Temp raw value div 10 = Grad C; Leakage 0 or 1"
::= { didactumSensorEntry 7 }
END
12. Testing & Troubleshooting
Diagnostic Commands
# Test SNMP connection to Didactum snmpwalk -v2c -c didactum_tcl 192.168.1.50 .1.3.6.1.4.1.46501.5.1.1 # Check individual OID value snmpget -v2c -c didactum_tcl 192.168.1.50 .1.3.6.1.4.1.46501.5.1.1.7.101001 # Expected output: INTEGER: 215 (= 21.5 degrees Celsius) # TclMon service status sudo systemctl status tclmon # Follow TclMon log live tail -f /home/tclmon/tclmon/log/tclmon.log # Show RRD database content rrdtool lastupdate /home/tclmon/tclmon/rrd/didactum_serverraum_Leckage_Sensor_01.rrd # Test Tcl package availability tclsh -c "package require Tclsnmp; puts OK" # Query TclMon server directly via plaintext protocol echo "list_objects" | nc localhost 9001 echo "get_alarms" | nc localhost 9001
Error Messages and Solutions
| Problem | Cause & Solution |
|---|---|
| package require Tclsnmp fails | Tclsnmp not correctly installed or path in pkgIndex.tcl incorrect → Check path: tclsh -c "puts [info library]" |
| SNMP timeout in Tclsnmp test | Community string incorrect; UDP 161 blocked; device unreachable → test snmpwalk manually |
| RRD database not created | RRD directory missing or incorrect permissions → mkdir -p /home/tclmon/tclmon/rrd && chown tclmon:tclmon /home/tclmon/tclmon/rrd |
| Temperature value 10x too high (e.g., 215 instead of 21.5) | scale parameter in objects.conf missing or is 1 → set scale 0.1 for temperature sensors; enter thresholds × 10 |
| No alarm on leakage | crit_high value incorrect → set crit_high 0 (triggers critical if value 1 = water) |
| No e-mail on alarm | Postfix/sendmail not configured; e-mail address in tclmon.conf incorrect → send test e-mail manually |
| TclMon service does not start | Tcl libraries missing; configuration error in objects.conf → journalctl -u tclmon -f; check syntax of config file |
| Netstate shows no connection | TclMon server port 9001 unreachable; firewall blocked → check nc -zv localhost 9001 |
13. Final Checklist
System & Installation
- Tcl 8.5+ installed
- Tclsnmp package loaded (package require Tclsnmp without error)
- Tclsyslog, Thread, Rrd, ip, dns, time packages available
- RRDtool and fping installed
- TclMon archive extracted to /home/tclmon/tclmon/
- User tclmon created
Didactum Device
- SNMP activated (v2c), Community: didactum_tcl
- Device reachable via ping from the TclMon server
- snmpwalk from the TclMon server successful
- Tclsnmp test: all OID values queried correctly
TclMon Configuration
- tclmon.conf: ROOT_DIR, FPING_BINARY, RRDTOOL_BINARY correctly set
- tclmon.conf: Mail recipient and SMTP relay configured
- objects.conf: Object didactum_serverraum created with all OIDs
- Temperature sensors: scale 0.1, warn_high 280, crit_high 350
- Leakage sensors: poll_interval 120, crit_high 0
- TclMon service running (systemctl status tclmon)
- RRD databases are created and filled
Alerting & Visualization
- Test e-mail sent successfully
- Alarm log shows correct entries (tclmon.log)
- Netstate client connects to TclMon server (port 9001)
- All Didactum sensors visible in Netstate with status OK (green)
- RRD graphs for temperature sensors accessible via Netstate