2983 Zeichen
Score aktualisiert
100%
Code: 8292f9a3d1c143ddba1fc7d87b3a1993
Token in Entwicklung nicht aktualisiert
img-Tag in Entwicklung deaktiviert
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.
gesamtes Script markieren / kopieren
! 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
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.
Der auszuführende Befehl.
Hier setze ich den Befehl, den der CUx-Daemon gleich ausführen soll …
… stelle ein, dass ich die Ausgabe des Befehls zurückgeliefert haben möchte …
… 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)