------------------
Hallo
Ziel dieser kleinen Erklärung soll es sein, den Duty_Cycle (DC) der CCU2 und der Lan Adapter als Systemvariable zu speichern, um diese auf der Startseite der WebUI anzuzeigen, oder als Diagramm mit einem externen Logging Toool darzustellen.
Die Entwicklung der Scripte hat in diesem Beitrag statt gefunden
http://homematic-forum.de/forum/viewtop ... 26&t=31397
Der Hauptanteil der Entwicklung wurde vom User "Black" geleistet
Die Datenpunkte des DC sind auch in den Einzelgeräten vorhanden, haben aber Stand heute keinen auslesbaren Wert.
Der Wert des DC in 0...100% gibt die Funkauslastung der CCU in Bezug auf die max Funk Zeit pro Stunde an. Ist die Zeit ausgeschöpft (100%) so macht die CCU eine Pause, sendet nicht mehr und es gibt massenweise Kommunikationsstörungen, die dann im Laufe der nächsten 1...2 Std wie von Geisterhand wieder verschwinden.
Zum Programm selbst:
Voraussetzungen:
- CCU2 ab FW 2.17
- Je CCU (Lan Adapter) eine SysVar (im Beispiel "DC_CCU"), Typ Zahl, 0 - 1000
- weiterhin werden die Seriennummern der Geräte benötigt (Beispiel CCU2 KEQ0101847)
- im Beispiel wird das Programm nicht mit exec, sondern mit dem entsprechenden CuxD Gerät aufgerufen
Im ersten Schritt wird eine Textdatei erstellt. Vorzugsweise mit einem Editor, der später im UNIX Format abspeichern kann. Der Name der Datei ist frei (Endung -> .tcl), lautet im Beispiel "dutyccu.tcl"
Code: Alles auswählen
#!/bin/tclsh
#
# Ermitteln des duty cycle der CCU
# =================================================
# Michael Thelen aka Black in Juni 2016
#
# Aufruf mit
# tclsh dutyccu.tcl <SERNR> <SYSVAR> oder
# Wenn nur eine CCU da ist mit
# tclsh dutyccu.tcl CCU2 <SYSVAR>
# =================================================
load tclrpc.so
load tclrega.so
#Beide Übergabeparameter aus CMD holen
set item1 [lindex $argv 0]
set item2 [lindex $argv 1]
# item1 enthält den Suchbegriff
# item2 enthält den Namen der Systemvariablen
# Seriennummer ist item2 eingepackt in 2 "*"
set sernr ""
append sernr "*" $item1 "*"
set r [xmlrpc http://127.0.0.1:2001/ listBidcosInterfaces ]
set dutycycle -1
set lines [split [string map [list "ADDRESS" "\x00"] $r] "\x00"]
# und nun durch alle teile mal durch
foreach line $lines {
set treffer [string match $sernr $line]
# Seriennummer wurde gefunden
if {$treffer==1} {
regexp "DUTY_CYCLE (.*?) " $line dummy dutycycle
break
#dann aber auch break der schleife
}
}
# Es wurde ein Dutycycle gefunden ()
if {$dutycycle != -1} {
set rega_cmd ""
append rega_cmd "dom.GetObject('$item2').State('$dutycycle');"
rega_script $rega_cmd
puts "Success - Duty Cycle: $dutycycle"
}
Der Aufruf des Programms erfolgt später mit 2 Parametern, kann aber auch auf der Kommandozeile der CCU getestet werden.
Der erste Parameter ist die Seriennummer der CCU oder des Lan adapters. Der zweite Parameter ist die zu beschreibende SysVar
Code: Alles auswählen
tclsh dutyccu.tcl KEQ0101847 DC_CCU
Die Datei wird auf die CCU2 kopiert. z.B. mit SFTP oder durch Anschluss eines USB Stick.
Ziel der Datei kann "/usr/local/" , aber auch jedes selbst erstellte Unterverzeichnis in diesem Ordner sein.
Die Datei muss danach noch als ausführbar" gekennzeichnet werden, in dem man die Rechte auf 755 ändert.
Schritt 2 , Erstellen des WebUI Programms
Ich weiss nicht, wie oft der DC Wert auf der CCU neu gesetzt wird. Da es aber eher eine langfristige Kennzahl ist, habe ich mich im Beispiel für eine Ausführungszeit alle 5 min entschieden.
Das kann im WebUI Programm mit dem Zeitmodul geschehen, oder mit einem Kanal des CuxD.
Das Script im WebUI Programm sieht wie folgt aus:
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/dutyccu.tcl KEQ0101847 DC_CCU");
Code: Alles auswählen
string stdout;
string stderr;
system.Exec("tclsh /usr/local/dutyccu.tcl KEQ0101847 DC_CCU", &stdout, &stderr);
Unten noch ein Beispiel für eine CCU2, incl. eines Reboot.
Das Diagramm ist auf 0...15 % skaliert, da keine höheren Werte aufgetreten sind.
Viel Erfolg bei testen