Was ist der Duty-Cycle?

08.02.2019 / kaju74 / 1.358

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.

Hinweis

Die max. Sendezeit eines HomeMatic-Gerätes darf daher 1% einer Stunde (= 36 Sekunden/h) nicht überschreiten. Bei Überschreitung dieser Vorgabe setzt die Kommunikation des entsprechenden Gerätes bis zu max. einer Stunde aus.

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:

  1. WebUI der HomeMatic Zentrale öffnen
  2. Klicke auf "Einstellungen" -> "Systemvariablen"
  3. Lege eine neue Variable mit folgenden Werten an:

Bild

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:

Bild

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.

Erklärvideo zum Duty-Cycle

https://youtu.be/-Qrd7raiwwI

- Code scannen, um zur Orginalseite zu gelangen -