Homematic Duty-Cycle auslesen

Aus WagoTEC


Duty-Cycle, was ist denn das.....

  • Jedes Gerät darf dieses Frequenzband (868Mhz) nur 1% einer Stunde (also 36s pro Stunde) benutzen. Hat ein Gerät diese Zeit erreicht, darf es nichts mehr senden. Im 868Mhz-Band sind keine Dauersender erlaubt. So kann es passieren, dass ein Gerät eine Stunde lang nichts mehr senden darf.
  • Wenn ein angelerntes Gerät diesen Status erreicht, sendet es keine Sensordaten/Statusdaten mehr, es wird zwar auf Befehle reagieren, kann diese aber nicht bestätigen, so dass die Zentrale mehrfach versucht, den Befehl abzusetzen.
  • Wenn die Zentrale (CCU) diesen Status erreicht, wird absolut nichts mehr gesteuert, sie empfängt dann nach wie vor die Daten von den angelernten Geräten, kann aber selbst nichts senden, was dann dazu führt, dass die Geräte, die eine Bestätigung von der Zentrale erwarten, ihre Sendungen dann mehrfach wiederholen (Pro Gerät kann eingestellt werden, wie oft ein Gerät die Sendung wiederholt).
  • Wenn also die Auslastung des Duty-Cycle auf 100% steigt (es wurde innerhalb einer Stunde 36s gesendet), hilft nur warten.....warten....warten

Manchmal hilft auch warten nicht, weil sich der Datenverkehr durch unbedachte Programmierung immer am Limit befindet, so dass durch irgendeine Aktion der Datenverkehr bis zum Limit hoch geschaukelt wird. Der Duty-Cycle erhöht sich insbesondere bei einem Neustart der Zentrale, das ist normal, da alle Geräte angesprochen werden, sollte sich aber in spätestens 30 Minuten normalisieren.

Leider zeigt die HomeMatic, zumindest in älteren Firmware Versionen, diesen wichtigen Zustand nicht an, sie sendet einfach nichts mehr und man sucht sich die Hacken ab wenn etwas nicht funktioniert wie es sollte. Ich hoffe, dass der Hersteller das irgendwann mal implementiert, so dass der Duty-Cyle ohne diese "Verrenkung" angezeigt und abgefragt werden kann.


InfoIcon.png Aktuell benutze ich Raspberrymatic, dort werden die Duty-Cycle automatisch erfasst! Das nachfolgende Script basiert noch auf meiner CCU2, die den Duty-Cycle leider nicht anzeigt. Die Scripte wurden auch nur auf einer CCU2 getestet!


Wie kann man nun den Zustand des Duty-Cycle anzeigen/erfassen:

Die Zusatz-Software CUx-Daemon installieren, wenn nicht schon vorhanden. Dieser wird auch für weitere Funktionen benötigt, insbesondere kann man damit sicher Systemprogramme in der HomeMatic ausführen. Der CUx Dämon kann am besten unter https://www.homematic-inside.de/addons heruntergeladen und dann installiert werden. Bitte auf die zum Gerät verwendete Version achten.

  1. Über die Systemsteuerung der HomeMatic die Konsole des CUxD aufrufen
  2. Im CUxD muss ein neues Gerät eingerichtet werden das zum Aufruf eines Systemprogrammes geeignet ist.

Einrichten des CUxD Gerätes:

  • Auf die CUxD-Konsole einloggen
  • Auf die Geräte-Seite wechseln
  • Das Gerät (28) System auswählen
  • Die Funktion Exec auswählen
  • Gerät auf der CCU erzeugen

Einrichten einer Systemvariablen, die den Wert des Duty-Cycle enthält:

Homematic GrundwissenSystemvariableDutyCycle.png


Nun erstellst du ein Programm in der Homematic, das über die Zeitsteuerung alle 5 Minuten folgendes Script ausgeführt:

! DutyCycle auslesen und in Systemvariable schreiben
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("echo 'load tclrpc.so; puts [xmlrpc http://127.0.0.1:2001/ listBidcosInterfaces ]'|tclsh |grep -o 'DUTY_CYCLE.[0-9]*.'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
if (dom.GetObject(ID_SYSTEM_VARIABLES).Get("Status-DutyCycle")){dom.GetObject(ID_SYSTEM_VARIABLES).Get("Status-DutyCycle").State((dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State().StrValueByIndex(" ",1)).ToFloat());}
WriteLine((dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State().StrValueByIndex(" ",1)).ToFloat()); 

Nun kann der Duty-Cycle jederzeit aus der Systemvariable "Status-DutyCycle" ausgelesen werden. Ab besten blendet man diese Variable in der Admin Oberfläche ein, so daß man sie immer im Blick hat.