Was ist der Duty-Cycle?
Der Duty-Cycle beschreibt eine gesetzlich geregelte Begrenzung der Senderzeit von Geräten im 868-Mhz-Bereich, in dem auch HomeMatic agiert. Ziel dieser Regelung ist es, die Funktion aller in diesem Bereich arbeiteten Geräten zu gewährleisten.
In normalen Betrieb wird der Duty-Cycle in der Regel nicht vollständig ausgereizt. Während der Einrichtungs- bzw. Konfigurationsphase kann es aber durch vermehrte und funkintensive Alernprozesse dazu kommen. Dies wird durch 1x langes und 1x kurzes, rotes Blinken am Gerät visualisiert. Bis zum Ablauf des Duty-Cylces kann bzw. darf das betroffene Gerät nicht mehr kommunizieren.
Duty-Cycle anzeigen (CCU2/3)
Es gibt verschiedene Möglichkeiten, den Duty-Cycle auszuwerten und anzuzeigen. In diesem Beispiel wird eine neu anzulegende Systemvariable verwendet, die damit auch in Programmen benutzt werden kann, sowie dass AddOn "CUx-Daemon".
Systemvariable anlegen
Zunächst gilt es, die angesprochene Systemvariable anzulegen. Gehe dazu wie folgt vor:
- WebUI der HomeMatic Zentrale öffnen
- Klicke auf "Einstellungen" -> "Systemvariablen"
- Lege eine neue Variable mit folgenden Werten an:
CUx-Daemon vorbereiten
Sofern Du das AddOn noch nicht installiert hast, tue dies bitte bevor Du fortfährst. Nach der Installation hast Du die Möglichkeit, ein neues virtuelles Gerät anzulegen. Benötigt wird hier das Gerät "(28) System". Dieses bekommt im Regelfall den Namen "CUX2801001". Sollte das Gerät bei Dir anders heißen, ist das nachfolgende Skript entsprechend anzupassen. Weitere Informationen zu den Möglichkeiten von CUx-D kannst Du dem ausführlichen Handbuch entnehmen.
Programm erstellen
Als nächstes benötigen wir ein Programm, welches das eigentliche Skript zum Befüllen der neu angelegten Systemvariable periodisch aufruft. Dies könnte z.B. wie folgt aussehen:
Im "Dann"-Abschnitt der Programms ist dann folgendes Skript einzufügen:
! DutyCycle auslesen
dom.GetObject ("CUxD.CUX2801001:1.CMD_SETS").State("echo 'load tclrpc.so; puts [xmlrpc http://127.0.0.1:2001/ listBidcosInterfaces ]'|tclsh | awk '// { printf $10 }'");
dom.GetObject ("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string s_reply = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
dom.GetObject ("DutyCycle").State (s_reply.ToFloat());
! Ende des Scripts
Das Skript nutzt CUx-D, um den Befehl "system.exec" durch eine effizientere Version zu ersetzen, da es auch heute noch bei häufigem Aufruf der CCU-eigenen Version zu Abstürzen kommen kann. Hier ist es wichtig, das die Gerätenummer (CUX2801001) mit dem zuvor angelegten CUx-D System-Gerät übereinstimmt.
Im Grunde genommen war es das schon. Mit diesem Skript wird die Systemvariable periodisch mit dem aktuell ermittelten Wert des Duty-Cycles gefüllt und kann z.B. auf der Startseite angezeigt oder in einem anderen Programm (zum Auslösen) benutzt werden.
Duty-Cycle anzeigen (RaspberryMatic)
Wer anstatt einer CCU2/3 einen RaspberryPi mit RaspberryMatic als Betriebssystem am Start hat, kann sich das Anlegen der oben beschriebenen Systemvariable und des Programms ersparren. Seit einigen Versionen wird beim Starten des Systems automatisch die Systemvariable "DutyCycle" angelegt und automatisch aktualisiert. Diese kann dann wie gewohnt z.B. auf der Startseite angezeigt oder in Programmen verwendet werden.