Didactum Monitoring & TclMon Integration
Vollständige Schritt-für-Schritt-Anleitung zur Einbindung von Didactum Monitoring-Geräten und Sensoren in TclMon via SNMP – inklusive Installation, Abhängigkeiten, Konfigurationsdateien, SNMP-Objektdefinition, RRD-Datenspeicherung, Alarmkonfiguration, E-Mail-Benachrichtigung und Netstate-Client-Visualisierung.
Produkthinweis: TclMon ist ein plattformunabhängiges Open-Source-Netzwerk-Monitoring-System, das vollständig in der Skriptsprache Tcl implementiert ist. Es besteht aus einem Server-Prozess, der SNMP-Daten von Netzwerkgeräten sammelt und in RRD-Datenbanken speichert, sowie dem Netstate-Client, der eine grafische Darstellung der gesammelten Daten und Alarme bietet. TclMon nutzt die thread-sichere Tclsnmp-Bibliothek für alle SNMP v1/v2c/v3-Abfragen. Die Konfiguration von Geräten und OIDs erfolgt ausschließlich über Textkonfigurationsdateien (objects.conf und tclmon.conf). Didactum Umgebungssensoren werden als benutzerdefinierte SNMP-Objekte vollständig integriert.
- Software: TclMon (Open Source, SourceForge) + Netstate Client
- Plattform: Linux (Debian / Ubuntu / RHEL / CentOS)
- Protokoll: SNMP v1 / v2c / v3 (via Tclsnmp)
- Geräte: Didactum Monitoring System 100T / 300T / 500 / 550T
- Sensoren: Temperatur, Leckage, Luftfeuchtigkeit, Türkontakt, Rauch
1. Voraussetzungen & Systemüberblick
TclMon-Server
- Linux-Server (Debian 10+, Ubuntu 20.04+, RHEL/CentOS 7+)
- Tcl 8.5 oder höher installiert
- Folgende Tcl-Pakete verfügbar: Thread, Tclsnmp, Tclsyslog, Rrd, ip, dns, time
- RRDtool installiert (für Datenspeicherung und Graphen)
- fping installiert (für ICMP-Verfügbarkeitspürfung)
- UDP-Port 161 ausgehend für SNMP Polling geöffnet
- Netzwerkzugang vom TclMon-Server zum Didactum-Gerät vorhanden
Didactum-Gerät
- Monitoring System 100, 300, 500 oder 550T
- SNMP aktiviert (v2c empfohlen)
- Gerät per ICMP vom TclMon-Server erreichbar
- MIB-Datei im Web-Interface verfügbar (Download unter Preferences → SNMP)
Architektur & Datenfluss
[TclMon Server] [Didactum Monitoring System]
Linux-Server IP: 192.168.1.50
tclmon-server (Tcl-Prozess)
RRD-Datenbank (historische Daten)
Netstate Client (Visualisierung)
-- SNMP GET/WALK UDP 161 (Tclsnmp) -->
<-- INTEGER-Werte (Sensorwerte) --------
TclMon-Architektur
- tclmon-server: Hauptprozess in Tcl; liest Konfigurationsdateien; startet Thread-basiertes SNMP-Polling; speichert Daten in RRD-Datenbanken; bewertet Alarmzustände
- Tclsnmp: Thread-sichere SNMP-Bibliothek für Tcl; unterstützt SNMP v1/v2c/v3 Get, GetNext, Walk, Trap
- Tclsyslog: Thread-sichere Syslog-Bibliothek; wird für Alarm-Logging verwendet
- RRDtool: Round-Robin-Datenbank für die langfristige Speicherung von Zeitreihendaten (Temperaturen, Messwerte)
- Netstate Client: Grafische Visualisierungsapplikation; zeigt aktuellen Status, Alarme und historische Graphen
2. TclMon installieren
Schritt 1 – Systemabhängigkeiten installieren
# 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
Schritt 2 – Tclsnmp und Tclsyslog installieren
# Tclsnmp und Tclsyslog von SourceForge herunterladen # sourceforge.net/projects/tclmon/ # Archive entpacken in Tcl-Library-Verzeichnis # Tcl-Library-Pfad ermitteln: tclsh % puts [join [lsearch -inline -all [info library] *] \n] % exit # Typischerweise: /usr/lib/tcl8.6/ oder /usr/local/lib/tcl8.6/ # Tclsnmp entpacken: sudo tar xzf tclsnmp-*.tar.gz -C /usr/lib/tcl8.6/ # Tclsyslog entpacken: sudo tar xzf tclsyslog-*.tar.gz -C /usr/lib/tcl8.6/ # pkgIndex.tcl-Pfad ggf. korrigieren: sudo vi /usr/lib/tcl8.6/tclsnmp/pkgIndex.tcl
Schritt 3 – Tcl-Pakete prüfen
# Alle benötigten Pakete müssen ladbar sein: tclsh % package require Thread % package require Syslog % package require Tclsnmp % package require Rrd % package require ip % package require dns % package require time % exit # Kein Fehler = alle Pakete verfügbar
Schritt 4 – TclMon-Benutzer anlegen und Archiv entpacken
# Benutzer anlegen sudo useradd -m -d /home/tclmon -s /bin/bash tclmon # TclMon-Archiv herunterladen und entpacken # sourceforge.net/projects/tclmon/ sudo tar xzf tclmon-*.tar.gz -C /home/tclmon/ sudo chown -R tclmon:tclmon /home/tclmon/ # Zum TclMon-Verzeichnis wechseln cd /home/tclmon/tclmon/
Schritt 5 – TclMon-Basisvariablen anpassen
# In der Hauptkonfigurationsdatei anpassen: vi /home/tclmon/tclmon/tclmon.conf # Folgende Variablen prüfen und ggf. anpassen: 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@ihredomain.de CONFIG(ALARMS_SERVER_MAIL_NOTIFY_RCPT) admin@ihredomain.de CONFIG(ALARMS_SERVER_MAIL_NOTIFY_SUBJECT) [TclMon ALARM] %object% - %parameter%
3. SNMP auf dem Didactum-Gerät aktivieren
Schritt 1 – Didactum Web-Interface öffnen
Im Browser aufrufen: 192.168.1.50 (IP des Didactum-Geräts anpassen)
Schritt 2 – SNMP-Einstellungen aufrufen
Preferences → SNMP
Schritt 3 – Folgende Werte eintragen
| Feld im Didactum Web-Interface | Wert |
|---|---|
| SNMP aktivieren | Aktiviert |
| SNMP-Version | v2c (empfohlen) |
| Community String | didactum_tcl (nicht „public“ verwenden!) |
| SNMP-Port | 161 |
Einstellungen speichern. SNMP-Verbindung testen:
# Vom TclMon-Server aus: snmpwalk -v2c -c didactum_tcl 192.168.1.50 .1.3.6.1.4.1.46501.5.1.1 # Alle Sensor-Messwerte snmpwalk -v2c -c didactum_tcl 192.168.1.50 .1.3.6.1.4.1.46501.5.1.1.7 # Alle Sensor-Namen snmpwalk -v2c -c didactum_tcl 192.168.1.50 .1.3.6.1.4.1.46501.5.1.1.5
Sensor-IDs per snmpwalk ermitteln
# Die Sensor-ID ist die letzte Zahl in der OID (z.B. 101001) # Ausgabe-Beispiel: # .1.3.6.1.4.1.46501.5.1.1.5.101001 = STRING: "Temperatur Serverraum" # .1.3.6.1.4.1.46501.5.1.1.7.101001 = INTEGER: 215 (= 21,5 Grad C) # .1.3.6.1.4.1.46501.5.1.1.7.107001 = INTEGER: 0 (= trocken)
4. OID-Referenz für Didactum-Sensoren
Alle Didactum-OIDs beginnen mit .1.3.6.1.4.1.46501. Die Sensor-ID am Ende wird per snmpwalk ermittelt.
OID-Felder je Sensor
| Feld | Bedeutung | Beispiel-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=Warnung, 2=Kritisch, 3=Fehler | .1.3.6.1.4.1.46501.5.1.1.6.101001 |
| .7.x.SENSOR_ID | Messwert (aktuell) | .1.3.6.1.4.1.46501.5.1.1.7.101001 |
Sensortypen mit OIDs und Skalierung
| Sensortyp | Sensor-ID | OID Messwert | Skalierung | Alarm-Schwelle |
|---|---|---|---|---|
| Temperatursensor Port 1 | 101001 | .1.3.6.1.4.1.46501.5.1.1.7.101001 | Rohwert ÷ 10 = °C (215 = 21,5 °C) | Warn: > 280 / Krit: > 350 |
| Temperatursensor Port 2 | 101002 | .1.3.6.1.4.1.46501.5.1.1.7.101002 | Rohwert ÷ 10 = °C | Warn: > 280 / Krit: > 350 |
| Luftfeuchtesensor Port 1 | 102001 | .1.3.6.1.4.1.46501.5.1.1.7.102001 | Direktwert = %rH | Warn: > 80 / Krit: > 90 |
| Kombisensor Temperatur (CAN) | 103001 | .1.3.6.1.4.1.46501.5.1.1.7.103001 | Rohwert ÷ 10 = °C | Warn: > 280 / Krit: > 350 |
| Kombisensor Luftfeuchte (CAN) | 103002 | .1.3.6.1.4.1.46501.5.1.1.7.103002 | Direktwert = %rH | Warn: > 80 / Krit: > 90 |
| Türkontakt | 104001 | .1.3.6.1.4.1.46501.5.1.1.7.104001 | 0 = geschlossen, 1 = geöffnet | Warn: > 0 |
| Rauchmelder | 106001 | .1.3.6.1.4.1.46501.5.1.1.7.106001 | 0 = OK, 1 = Alarm | Krit: > 0 |
| Leckage-Sensor (Spot) | 107001 | .1.3.6.1.4.1.46501.5.1.1.7.107001 | 0 = trocken, 1 = Wasser | Krit: > 0 |
| Leckage-Sensor (Kabel) | 107002 | .1.3.6.1.4.1.46501.5.1.1.7.107002 | 0 = trocken, 1 = Wasser | Krit: > 0 |
| Systemzustand (Gerät gesamt) | – | .1.3.6.1.4.1.46501.1.1.0 | 0 = OK, 1 = Warnung, 2 = Kritisch | Warn: > 0 / Krit: > 1 |
Wichtiger Hinweis – Temperaturschwellwerte: TclMon vergleicht den SNMP-Rohwert direkt. Da Didactum Temperaturen als Rohwert × 10 liefert (215 = 21,5 °C), müssen alle Schwellwerte ebenfalls × 10 angegeben werden. 28 °C Warnung = Schwellwert 280.
5. TclMon-Konfigurationsdatei – Didactum-Objekte definieren
TclMon wird vollständig über Textkonfigurationsdateien gesteuert. Das Didactum-Gerät wird in objects.conf als SNMP-Objekt mit seinen OIDs definiert. TclMon erkennt automatisch verfügbare Parameter und pflegt die Liste aktuell.
Datei: /home/tclmon/tclmon/objects.conf
# ================================================================
# TclMon Objektkonfiguration fuer Didactum Monitoring System
# Didactum Enterprise OID: 1.3.6.1.4.1.46501
# ================================================================
# ----------------------------------------------------------------
# Objekt: Didactum Monitoring System Serverraum
# ----------------------------------------------------------------
object didactum_serverraum {
# Grundlegende Verbindungsparameter
address 192.168.1.50
description "Didactum Monitoring System Serverraum"
location "Serverraum"
contact "admin@ihredomain.de"
# SNMP-Parameter
snmp_version 2c
snmp_community didactum_tcl
snmp_port 161
snmp_timeout 5000
snmp_retries 3
# Polling-Intervall (Sekunden)
poll_interval 300
# ICMP-Verfügbarkeitspruefung
ping_enabled 1
ping_interval 60
# SNMP-Methoden zum Sammeln
methods { snmp_custom rrd_store }
# -------- Benutzerdefinierte SNMP-Parameter --------
# Temperatursensor Port 1 (Rohwert; 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 "Grad C"
warn_high 280
crit_high 350
rrd_store 1
}
# Temperatursensor 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 "Grad C"
warn_high 280
crit_high 350
rrd_store 1
}
# Luftfeuchtesensor 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
}
# Leckage-Sensor Spot (0=trocken 1=Wasser erkannt)
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
}
# Leckage-Sensor Kabel
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
}
# Tuerkontakt (0=geschlossen 1=offen)
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
}
# Rauchmelder (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=Warnung 2=Kritisch 3=Fehler)
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
}
# Systemzustand Geraet gesamt (0=OK 1=Warn 2=Krit)
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 Hauptkonfiguration (tclmon.conf)
Die Hauptkonfigurationsdatei steuert den TclMon-Server-Prozess, Alarmierungsverhalten, Mail-Versand und Logging.
Datei: /home/tclmon/tclmon/tclmon.conf (relevante Abschnitte)
# ================================================================
# TclMon Hauptkonfiguration (Auszug fuer Didactum-Integration)
# ================================================================
# ---- Serverpfade ----
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
# ---- Externe Binaerdateien ----
set CONFIG(FPING_BINARY) /usr/bin/fping
set CONFIG(RSH_BINARY) /usr/bin/rsh
set CONFIG(RRDTOOL_BINARY) /usr/bin/rrdtool
# ---- SNMP-Standardwerte ----
set CONFIG(SNMP_DEFAULT_VERSION) 2c
set CONFIG(SNMP_DEFAULT_TIMEOUT) 5000
set CONFIG(SNMP_DEFAULT_RETRIES) 3
# ---- Alarmserver-Einstellungen ----
set CONFIG(ALARMS_SERVER_ENABLED) 1
set CONFIG(ALARMS_SERVER_PORT) 9001
# ---- E-Mail-Alarmierung ----
set CONFIG(MAIL_NOTIFY_ENABLED) 1
set CONFIG(MAIL_SENDER) tclmon@ihredomain.de
set CONFIG(MAIL_RCPT) admin@ihredomain.de
set CONFIG(MAIL_RCPT_CRITICAL) admin@ihredomain.de,notfall@ihredomain.de
set CONFIG(MAIL_SUBJECT_WARN) {[TclMon WARNUNG] %object% - %param% = %value%}
set CONFIG(MAIL_SUBJECT_CRIT) {[TclMon KRITISCH] %object% - %param% = %value%}
set CONFIG(MAIL_SUBJECT_RECOVER) {[TclMon OK] %object% - %param% normalisiert}
# ---- 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-Einstellungen (Skalierung) ----
set CONFIG(THREAD_POOL_SIZE) 10
set CONFIG(POLLER_THREADS) 5
# ---- Alarmunterdrückung (Maintenance Window) ----
# Zeitraum in Cron-Syntax: "Minute Stunde Tag Monat Wochentag"
# Beispiel: Wartung samstags 02:00-04:00 Uhr
set CONFIG(MAINTENANCE_WINDOW) {0 2 * * 6}
set CONFIG(MAINTENANCE_DURATION) 7200
7. SNMP-Polling mit Tclsnmp verifizieren
Vor dem Start von TclMon sollte die SNMP-Verbindung mit dem Tclsnmp-Paket direkt im Tcl-Interpreter getestet werden.
Interaktiver Tclsnmp-Test
tclsh
# Paket laden
package require Tclsnmp
# SNMP-Session zum Didactum-Geraet erstellen
set session [snmp::session -version 2c \
-community didactum_tcl \
-address 192.168.1.50 \
-port 161 \
-timeout 5000 \
-retries 3]
# Temperaturwert abfragen (Rohwert)
set result [$session get .1.3.6.1.4.1.46501.5.1.1.7.101001]
puts "Temperatur Rohwert: $result"
# Erwartete Ausgabe: 215 (= 21,5 Grad Celsius)
# Leckage-Sensor abfragen
set result [$session get .1.3.6.1.4.1.46501.5.1.1.7.107001]
puts "Leckage Status: $result"
# Erwartete Ausgabe: 0 (= trocken)
# Walk ueber alle Sensor-Messwerte
set results [$session walk .1.3.6.1.4.1.46501.5.1.1.7]
foreach {oid value} $results {
puts "$oid = $value"
}
# Session schließen
$session destroy
exit
Schnelltest per Shell-Skript
#!/usr/bin/env tclsh
# /usr/local/bin/didactum-snmp-test.tcl
# Didactum SNMP-Verbindungstest fuer 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 "FEHLER $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 # Erwartete Ausgabe: # OK Temperatur_01: 215 # OK Luftfeuchte_01: 58 # OK Leckage_01: 0 # OK Systemzustand: 0
8. TclMon-Server starten und Betrieb prüfen
Schritt 1 – TclMon-Server manuell starten (Test)
su - tclmon cd /home/tclmon/tclmon tclsh tclmon-server.tcl & # Log-Ausgabe beobachten: tail -f /home/tclmon/tclmon/log/tclmon.log
Schritt 2 – TclMon als Systemdienst einrichten
# systemd Service-Datei erstellen: 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
Schritt 3 – Polling-Status prüfen
# Aktuellen Status aller Objekte abfragen (plaintext Protokoll): echo "get_status didactum_serverraum" | nc localhost 9001 # RRD-Datenbanken pruefen (nach dem ersten Polling-Zyklus): rrdtool info /home/tclmon/tclmon/rrd/didactum_serverraum_Temperatur_Sensor_01.rrd # Letzten Messwert aus RRD abfragen: rrdtool lastupdate /home/tclmon/tclmon/rrd/didactum_serverraum_Temperatur_Sensor_01.rrd
9. Alarm- und E-Mail-Konfiguration
TclMon bewertet alle gesammelten Werte gegen die definierten Schwellenwerte und versendet bei Überschreitung E-Mails an die konfigurierten Empfänger.
E-Mail-Versand konfigurieren
# In tclmon.conf sicherstellen, dass E-Mail korrekt konfiguriert ist: # (SMTP wird über das lokale sendmail oder einen SMTP-Relay genutzt) # Sendmail / Postfix als lokalen Mail-Relay konfigurieren: sudo apt install postfix mailutils # Relay-Konfiguration in /etc/postfix/main.cf: relayhost = [mail.ihredomain.de]:587 # Test-E-Mail senden: echo "TclMon Test" | mail -s "[TclMon] Verbindungstest" admin@ihredomain.de
Alarm-Regeln in objects.conf (Zusammenfassung)
| Objekt / OID | warn_high | crit_high | Poll-Intervall | E-Mail bei |
|---|---|---|---|---|
| Temperatur_Sensor_01 | 280 (28 °C) | 350 (35 °C) | 300 Sek. | Warning + Critical |
| Temperatur_Sensor_02 | 280 | 350 | 300 Sek. | Warning + Critical |
| Luftfeuchte_Sensor_01 | 80 | 90 | 300 Sek. | Warning + Critical |
| Leckage_Sensor_01 | – | 0 (ab 1 = Wasser) | 120 Sek. | Critical |
| Leckage_Sensor_02 | – | 0 | 120 Sek. | Critical |
| Tuerkontakt_01 | 0 (ab 1 = offen) | – | 60 Sek. | Warning |
| Rauchmelder_01 | – | 0 (ab 1 = Alarm) | 60 Sek. | Critical |
| Geraet_Systemzustand | 0 | 1 | 300 Sek. | Warning + Critical |
10. Netstate-Client konfigurieren
Der Netstate-Client ist die grafische Visualisierungskomponente von TclMon. Er verbindet sich über das plaintext-Protokoll zum TclMon-Server und stellt Status, Alarme und historische Graphen dar.
Netstate installieren
# Netstate-Archiv von SourceForge herunterladen # sourceforge.net/projects/tclmon/ tar xzf netstate-*.tar.gz cd netstate/ # Abhängigkeiten: Tcl/Tk mit Wish sudo apt install tk # Debian/Ubuntu sudo dnf install tk # RHEL/CentOS
Netstate-Verbindung konfigurieren
# In der Netstate-Konfigurationsdatei: 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
Netstate starten
cd /home/tclmon/netstate wish netstate.tcl
Im Netstate-Fenster erscheint das Objekt didactum_serverraum mit allen konfigurierten Parametern. Farbliche Statusanzeige: Grün = OK, Gelb = Warning, Rot = Critical.
11. MIB-Vorlage für externe SNMP-Abfragen
-- ============================================================
-- 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 fuer Didactum Umgebungsueberwachungssysteme"
::= { 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 "Bezeichnung des Sensors"
::= { didactumSensorEntry 5 }
sensorStatus OBJECT-TYPE
SYNTAX Integer32 (0..3)
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Status: 0=Normal 1=Warnung 2=Kritisch 3=Fehler"
::= { didactumSensorEntry 6 }
sensorValue OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Messwert: Temp Rohwert div 10 = Grad C; Leckage 0 oder 1"
::= { didactumSensorEntry 7 }
END
12. Test & Fehlerbehebung
Diagnosebefehle
# SNMP-Verbindung zum Didactum testen snmpwalk -v2c -c didactum_tcl 192.168.1.50 .1.3.6.1.4.1.46501.5.1.1 # Einzelnen OID-Wert prüfen snmpget -v2c -c didactum_tcl 192.168.1.50 .1.3.6.1.4.1.46501.5.1.1.7.101001 # Erwartete Ausgabe: INTEGER: 215 (= 21,5 Grad Celsius) # TclMon-Dienststatus sudo systemctl status tclmon # TclMon-Log live verfolgen tail -f /home/tclmon/tclmon/log/tclmon.log # RRD-Datenbank-Inhalt anzeigen rrdtool lastupdate /home/tclmon/tclmon/rrd/didactum_serverraum_Leckage_Sensor_01.rrd # Tcl-Paket-Verfügbarkeit prüfen tclsh -c "package require Tclsnmp; puts OK" # TclMon-Server direkt über plaintext-Protokoll abfragen echo "list_objects" | nc localhost 9001 echo "get_alarms" | nc localhost 9001
Fehlermeldungen und Lösungen
| Problem | Ursache & Lösung |
|---|---|
| package require Tclsnmp schlägt fehl | Tclsnmp nicht korrekt installiert oder Pfad in pkgIndex.tcl falsch → Pfad prüfen: tclsh -c "puts [info library]" |
| SNMP-Timeout bei Tclsnmp-Test | Community String falsch; UDP 161 blockiert; Gerät nicht erreichbar → snmpwalk manuell testen |
| RRD-Datenbank wird nicht angelegt | RRD-Verzeichnis fehlt oder falsche Berechtigungen → mkdir -p /home/tclmon/tclmon/rrd && chown tclmon:tclmon /home/tclmon/tclmon/rrd |
| Temperaturwert 10× zu hoch (z. B. 215 statt 21,5) | scale-Parameter in objects.conf fehlt oder ist 1 → scale 0.1 für Temperatursensoren setzen; Schwellwerte × 10 eingeben |
| Kein Alarm bei Leckage | crit_high Wert falsch → crit_high 0 setzen (bei Wert 1 = Wasser = Critical ausgelöst) |
| Keine E-Mail bei Alarm | Postfix/sendmail nicht konfiguriert; E-Mail-Adresse in tclmon.conf falsch → Test-E-Mail manuell senden |
| TclMon-Dienst startet nicht | Tcl-Bibliotheken fehlen; Konfigurationsfehler in objects.conf → journalctl -u tclmon -f; Syntax der Konfigurationsdatei prüfen |
| Netstate zeigt keine Verbindung | TclMon-Server-Port 9001 nicht erreichbar; Firewall blockiert → nc -zv localhost 9001 prüfen |
13. Abschluss-Checkliste
System & Installation
- Tcl 8.5+ installiert
- Tclsnmp-Paket geladen (package require Tclsnmp ohne Fehler)
- Tclsyslog, Thread, Rrd, ip, dns, time-Pakete verfügbar
- RRDtool und fping installiert
- TclMon-Archiv nach /home/tclmon/tclmon/ entpackt
- Benutzer tclmon angelegt
Didactum-Gerät
- SNMP aktiviert (v2c), Community: didactum_tcl
- Gerät per Ping vom TclMon-Server erreichbar
- snmpwalk vom TclMon-Server erfolgreich
- Tclsnmp-Test: alle OID-Werte korrekt abgefragt
TclMon-Konfiguration
- tclmon.conf: ROOT_DIR, FPING_BINARY, RRDTOOL_BINARY korrekt gesetzt
- tclmon.conf: Mail-Empfänger und SMTP-Relay konfiguriert
- objects.conf: Objekt didactum_serverraum mit allen OIDs angelegt
- Temperatursensoren: scale 0.1, warn_high 280, crit_high 350
- Leckagesensoren: poll_interval 120, crit_high 0
- TclMon-Dienst läuft (systemctl status tclmon)
- RRD-Datenbanken werden angelegt und gefüllt
Alarmierung & Visualisierung
- Test-E-Mail erfolgreich versendet
- Alarm-Log zeigt korrekte Einträge (tclmon.log)
- Netstate-Client verbindet sich mit TclMon-Server (Port 9001)
- Alle Didactum-Sensoren in Netstate mit Status OK (grün) sichtbar
- RRD-Graphen für Temperatursensoren über Netstate abrufbar