Uptime der CCU

Wie lange die CCU läuft, kann man sich auf der Startseite anzeigen lassen

Wäre doch cool, wenn man gleich auf der Startseite sehen könnte, wie lange der letzte Neustart der CCU her ist.

Strings in HomeMatic-Scripten

Durch String-Verwendung in HomeMatic-Scripten kann die CCU fehlerhaft arbeiten, instabil werden oder sogar abstürzen. Grundsätzlich gilt: Je öfter mit Strings hantiert wird, desto eher führt dies zu Problemen.

Ich empfehle daher, nach Umsetzung dieser Anleitung die CCU unter Beobachtung zu halten.

Benennung von Systemvariablen

Prinzipiell kann man Systemvariablen – so wie allen Objekten in der CCU – beliebige Namen geben, also z. B. auch Umlaute und Sonderzeichen verwenden. Ich empfehle jedoch, sich auf reguläre Buchstaben (a-z, A-Z) zu beschränken: Bei Umlauten und Sonderzeichen besteht die Gefahr, dass Systemvariablen in Scripten nicht überall gefunden werden.

Shell

Auf der Linux-Shell kann man das mit einem einfachen uptime herausfinden.

# uptime
 18:55:42 up  6:47,  load average: 0.10, 0.19, 0.21
#

Da steckt allerdings zu viel Information drin, um es sinnvoll auf der Startseite anzuzeigen. cat /proc/uptime liefert einen süffigeren Wert: die Uptime in Sekunden.

# cat /proc/uptime
24434.37 19158.97
#

Ein bisschen awk-Magie – et voilà.

# cat /proc/uptime | awk '// { printf "%dT %02d:%02d", $1/86400, $1/3600%24, $1/60%60 }'
0T 06:51#

Systemvariable

Um einen Wert auf der Startseite anzuzeigen, wird er in einer Systemvariable gespeichert. Die Variable nenne ich mit gewohnter Kreativität Uptime.

Über Einstellungen / Benutzerverwaltung kann ich die Systemvariable für meinen Benutzer der Startseite hinzufügen.

Mit Einstellungen übernehmen ist das Wunder vollbracht: Uptime erscheint auf der Startseite.

Jetzt fehlt nur noch sinnvoller Text, der dort angezeigt werden könnte.

WebUI-Programm

Zur Befüllung der Systemvariablen lasse ich regelmäßig ein WebUI-Programm laufen. Das Programm koppele ich an meinen Systemtakt.

Die Uptime wird damit zwar nicht minütlich aktualisiert, aber ich werde auch keine Stunden vor dem Zähler verbringen, um minutengenau die Laufzeit zu bewundern. Grobe Schätzung reicht.

Das hinterlegte Script führt meinen bash-Befehl von oben aus und legt das Ergebnis in die Systemvariable.

! HomeMatic-Script
! UPTIME DER CCU
! http://www.christian-luetgens.de/homematic/cuxd/uptime/Uptime.htm

string s_cuxd = "CUxD.CUX2801001:3.";
string s_cmd = "cat /proc/uptime | awk '// { printf \"%dT %02d:%02d\", $1/86400, $1/3600%24, $1/60%60 }'";
dom.GetObject (s_cuxd # "CMD_SETS").State (s_cmd);
dom.GetObject (s_cuxd # "CMD_QUERY_RET").State (1);
dom.GetObject ("Uptime").State (dom.GetObject (s_cuxd # "CMD_RETS").State());

!  Ende des Scripts

s_cuxd

Genau wie bei der Abfrage der IP-Adresse: Die Seriennummer des virtuellen CUxD-Kanals.

Wie man sieht, verwende ich hier den dritten Kanal. Die ersten beiden sind schon für andere Aufgaben vergeben. Als Gedächtnisstütze habe ich den Kanal unter Einstellungen / Geräte passend benannt.

s_cmd

Der auszuführende Befehl.

CMD_SETS

Hier setze ich den Befehl, den der CUx-Daemon gleich ausführen soll …

CMD_QUERY_RET

… stelle ein, dass ich die Ausgabe des Befehls zurückgeliefert haben möchte …

CMD_RETS

… und starte den Befehl mit Hilfe von CMD_RETS, der nach Ausführung den Output zurückliefert. Und den lege ich direkt in meine Systemvariable Uptime.

Uptime in E-Mail-Vorlagen

Wer das Mini-Framework benutzt, der kann die Uptime auch in E-Mails der CCU anzeigen lassen. Dazu muss natürlich die Vorlage passend geändert werden, indem an passender Stelle eine weitere Variable hinzugefügt wird:

Die CCU läuft seit $uptime.

Im Tcl-Script wird die Variable mit Leben erfüllt:

array set values [rega_script {

 ... 
var uptime = dom.GetObject("Uptime").Value();

} ]

 ... 
set uptime $values(uptime)

Navigation