Duty_Cycle CCU2 als SysVar

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
Herbert_Testmann
Beiträge: 11102
Registriert: 17.01.2009, 12:30

Duty_Cycle CCU2 als SysVar

Beitrag von Herbert_Testmann » 12.06.2016, 13:27

Alternative ohne TCL Script http://homematic-forum.de/forum/viewtop ... 97#p335489

------------------

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");
oder auch per Aufruf über system.exec ohne CUxD (aber bitte sparsam mit zyklischen Aufruf).

Code: Alles auswählen

string stdout;
string stderr;
system.Exec("tclsh /usr/local/dutyccu.tcl KEQ0101847 DC_CCU", &stdout, &stderr); 
Im WebUi Programm kann eine zweite oder dritte DANN Zeile für Lan Adapter eingefügt werden, die dann "verzögert um" (z.B. 10 sec , 20 sec) aufgerufen werden. Die Parameter in der Script Zeile werden entsprechend angepasst.

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
Screenshot 2016-06-12 14.11.23.png
Zuletzt geändert von Herbert_Testmann am 21.01.2017, 00:15, insgesamt 2-mal geändert.
Grund: Alternative ohne TCL eingefügt
---
Dieses Schreiben wurde maschinell erstellt und ist ohne Unterschrift gültig

Benutzeravatar
Herbert_Testmann
Beiträge: 11102
Registriert: 17.01.2009, 12:30

Re: Duty_Cycle CCU2 als SysVar

Beitrag von Herbert_Testmann » 12.06.2016, 17:20

Screenshot 2016-06-12 17.18.30.png
---
Dieses Schreiben wurde maschinell erstellt und ist ohne Unterschrift gültig

Benutzeravatar
papi
Beiträge: 208
Registriert: 18.12.2013, 09:40
Wohnort: Willich, NRW

Re: Duty_Cycle CCU2 als SysVar

Beitrag von papi » 12.06.2016, 19:59

Huii, wieder was Neues zum Spielen, Danke, funktioniert prima! :-)

Hast Du das Diagramm mit einer externen Lösung erzeugt oder wie hast Du es geschafft, das Diagramm an einer Systemvariable, statt an einem Gerät, festzumachen?

Tobias78
Beiträge: 1440
Registriert: 27.06.2010, 01:01
Wohnort: Braunschweig

Re: Duty_Cycle CCU2 als SysVar

Beitrag von Tobias78 » 12.06.2016, 20:01

Hallo Herbert,
super coole Umsetzung und sehr gute Anleitung! Warum wird die Version 2.17 vorausgesetzt? Ich habe es in der V 2.15.5 umgestzt, es erscheint "Success", der DutyCycle verbleibt allerdings auf 0%. Ist die genutzte Funktion erst mit der 2.17 integriert worden? Ich schäue mich vor dem Update- leider hört man von den späteren Versionen zu viel über Kommunikationsprobleme und andere Bugs.
@papi: Welche Firmware Version verwendest Du?
Gruß, Tobias.

Update: Hab die Lösung grad selbst gefunden:
Beitragvon koppenho » 14.05.2016, 14:56

Familienvater hat geschrieben:
ich gehe davon aus, das der XML-RPC-Request listBidcosInterfaces beim Rückgabewert auf der CCU2 für den Dutycycle "Müll" zurückgibt, ich neige sogar dazu zu behaupten, das die Dutycylce Berechnung auf der CCU2 fehlerhaft ist.


Hurra! :D

Seit meinem Firmware-Update von 2.15.5 auf 2.17.16 liefert mein Script sinnvolle Werte grösser Null. Muss ich mal beobachten, welche Bedeutung die Werte haben könnten... ich vermute es sind Prozentzahlen der genutzten Bandbreite von der zulässigen Bandbreite.
Zuletzt geändert von Tobias78 am 10.09.2016, 14:41, insgesamt 2-mal geändert.
--------------------------------------------
Im Einsatz und empfehlenswert:
RaspberryMatic,IO.Broker, Homeputer Studio; CuXD; PocketControl, HomeStatus, Robonect, Alexa, HM Virtual Interface
------------------------------------------

Benutzeravatar
Black
Beiträge: 710
Registriert: 12.09.2015, 22:31
Wohnort: Wegberg
Kontaktdaten:

Re: Duty_Cycle CCU2 als SysVar

Beitrag von Black » 12.06.2016, 20:09

in früheren version gabs diesen datenpunkt zwar schon, aber der gab nur die werte 0.00 (alles ok) oder 1.00 (duty cycle aktiv) zurück, nicht die prozentuale ausnutzung des DC.

sysvars in Diagramme gehen
herbert benutzt io_broker, da kann man das definieren, ich benutz cuxd hichart, da gehts über loggingscript

mit den CCU boardmitteln der digramme gehts net.
wobei ich die diagramm funktion der ccu eher [zensur] finde.

greetz, Black
Die Wahrheit ist ein Chor aus Wind
Meine Seite, ok noch bisschen im Aufbau

RaspberryMatic 2.31.25.20180225 mit Groundplane Antennenmod (Mein Grundstück ist halt etwas gross)
jede Menge Sensoren und Aktoren, Logamatic 2107 Gateway zum Buderus Kessel
ioBroker als Hauptsteuersystem und Visualisierung
Script Time Scheduler V1.2
Script Developer V2.27.1

Benutzeravatar
Herbert_Testmann
Beiträge: 11102
Registriert: 17.01.2009, 12:30

Re: Duty_Cycle CCU2 als SysVar

Beitrag von Herbert_Testmann » 12.06.2016, 23:59

papi hat geschrieben:Huii, wieder was Neues zum Spielen, Danke, funktioniert prima! :-)

Hast Du das Diagramm mit einer externen Lösung erzeugt oder wie hast Du es geschafft, das Diagramm an einer Systemvariable, statt an einem Gerät, festzumachen?
Das obere Diagramm ist "io.broker" mit "flot"
Das untere Diagramm ist "Historian"
---
Dieses Schreiben wurde maschinell erstellt und ist ohne Unterschrift gültig

Benutzeravatar
Herbert_Testmann
Beiträge: 11102
Registriert: 17.01.2009, 12:30

Re: Duty_Cycle CCU2 als SysVar

Beitrag von Herbert_Testmann » 13.06.2016, 09:18

blackhole hat geschrieben: Beim Übernehmen der Code-Schnippsel ist mir das ein oder andere aufgefallen, daher hier noch ein paar Fixes/Verbesserungen/Anmerkungen:
  1. Am Ende der Zeile 25 (xmlrpc-Aufruf) ist eine geschlossene eckige Klammer zu viel.
    Wurde im Code angepasst
  2. Die Rechte der Datei sollten idealerweise auf 755 gesetzt werden und nicht auf 775 oder 777, wie irgendwo zu lesen war.
    Wurde im Text angepasst
  3. Der manuelle Shellstart "tclsh" vor dem eigentlichen Skript ist unnötig, da der Shebang im Skript korrekt gesetzt ist und somit die richtige Shell automagisch gestartet wird. Das klappt ohne manuellen Shellstart sowohl beim Aufruf in einer SSH-Session als auch beim Aufruf via crontab.
    Hat bei mir auf der Kommandozeile der CCU nicht funktioniert. Im WebUi Script nicht getestet, denn der zusätzliche Aufruf schadet ja nicht.
  4. Das Skript sollte idealerweise in einem neuen Verzeichnis unter "/addons/" abgelegt werden (z.B. /usr/local/addons/dutycycle/. In der crontab sollte dann so oder so der absolute Pfad angegeben werden.
    Kann man machen, darf jeder selbst entscheiden
  5. Wenn man zur Kontrolle eine kleine Bildschirmausgabe generiert ("Success") darf auch gerne noch der Duty Cycle mit ausgegeben werden. Daher eine kleine Erweiterung von Zeile 43: puts "Success - Duty Cycle: $dutycycle"
    Im Code angepasst.
Das alles nur als Vorschläge, kein "Muss", keine negativ Kritik - im Gegenteil. :)

Danke für die Verbesserungen.
---
Dieses Schreiben wurde maschinell erstellt und ist ohne Unterschrift gültig

DiJe
Beiträge: 343
Registriert: 04.03.2015, 06:51

Re: Duty_Cycle CCU2 als SysVar

Beitrag von DiJe » 13.06.2016, 12:32

Hallo Herbert,
muß ich noch in dem Script Seriennummer und Variabelennamen eingeben?
Was ist das für ein IP nummer die dort eingetragen ist, von der CCU ?
Gruß Dieter

Benutzeravatar
Black
Beiträge: 710
Registriert: 12.09.2015, 22:31
Wohnort: Wegberg
Kontaktdaten:

Re: Duty_Cycle CCU2 als SysVar

Beitrag von Black » 13.06.2016, 12:43

127.0.0.1 ist die Adresse unter der der Local Host erreichbar ist. Sie ist die Netzwerkadresse unter der der eigene Rechner sich selbst erreichen kann, auch ohne Netzwerk.

heisst das script auf der ccu ruft den rmlrpc auf der gleichen ccu auf. da musst und solltest nix anpassen. das ganze tcl script musste auch nicht anpassen.

in einem script auf der ccu wird das tcl script so aufgerufen:
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/dutyccu.tcl KEQ0101847 DC_CCU");

DC_CCU ist der name der systemvablen, die kannst duch auch DC_ABC nennen, die musst du nur vorher angelegt haben. das script legt die nicht selber an.

KEQ0101847 ist in dem fall von herbert die SerNr der CCU. hier musts du deine eintragen. hast du nur eine CCU2 und keine Lan gateways im Einsatz, reicht auch der Aufruf mit denm namen CCU2 als seriennummer dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/dutyccu.tcl CCU2 DC_CCU");

greetz Black
Die Wahrheit ist ein Chor aus Wind
Meine Seite, ok noch bisschen im Aufbau

RaspberryMatic 2.31.25.20180225 mit Groundplane Antennenmod (Mein Grundstück ist halt etwas gross)
jede Menge Sensoren und Aktoren, Logamatic 2107 Gateway zum Buderus Kessel
ioBroker als Hauptsteuersystem und Visualisierung
Script Time Scheduler V1.2
Script Developer V2.27.1

DiJe
Beiträge: 343
Registriert: 04.03.2015, 06:51

Re: Duty_Cycle CCU2 als SysVar

Beitrag von DiJe » 13.06.2016, 12:51

Hallo Black,
danke für deine schnelle Antwort.
Gruß Dieter

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“