Konfiguration

erfolgt über eine XML-Datei. "eibdef.xml" ist die zentrale Definition für Ihre KNX/EIB-Instal­lation. Sie wird erwartet in /usr/local/etc/rleibd. Zumindest müssen hier alle Gruppen Ihrer Instal­lation aufgelistet sein. Sehen Sie sich die Bei­spiel-XML-Datei an und Sie werden ver­stehen, wie das geht.
Im Element <eib> befinden sich Elemente für jede Ihrer Gruppen. Jede Gruppe muß mindestens eine Gruppen­adresse, einen Typ und einen Namen besit­zen.

<grp adr="4.2.3" type="OPENCLOSE" name="Fenster Wohn­zimmer">
</grp>

Typen

gültige type-Attribute sind

ONOFF ein Schalter
OPENCLOSE ein Fenster oder eine Türe
UPDOWN ein Rollo
PERCENT ein Prozentwert (z.B. ein Heizungsventil)
DEGREE ein Temperaturwert
BYTE ein Gerät das einen BYTE-Wert liefert

Optionale Elemente und Attribute sind wie folgt:

Optionale par-Ele­mente

im <par>-Element werden Parameter definiert, die während der Lauf­zeit von rleibd konstant oder für den Start vorde­finiert sind. Inner­halb des <par>...</par>-Elements sind fol­gende Unter­elemente defi­niert:

<phys>

beschreibt die physi­kalische Anbindung Ihrer Instal­lation (das Inter­face). Das bisher einzige Attri­but ist "device":

<phys device="(path-to-your-eibdevice)"></phys>

das standardmäßig /dev/eib lautet wenn Sie es nicht anders angeben.

<log>

erlaubt detail­lierte Angaben, was Sie in Ihrem Syslog sehen wollen und was nicht.

<log par="1" write="0" controls="1" script="1" trigger="0" namedTrigger="1" reminder="1" shutter="0" invalidates="0" asker="0"></log>

Die Namen der Attribute sprechen für sich, die Zahl gibt den Log-Level an. "0" bedeutet kein Logging, höhere Zahlen ergeben mehr und mehr Detailinformation. Allgemein kann man sagen, wenn Sie sehen wollen was vor sich geht, setzen Sie den Wert auf "1", wenn Sie debug­gen wollen auf "9". Fehler und kriti­sche Ereig­nisse werden immer geloggt.
Weitere Informa­tionen zum Loggen (nur auf Englisch)

Hinweis: damit "par" funktioniert muss "log" vor allen anderen Para­metern in der eibdef.xml stehen!

<path>

enthält optionale Informationen über die Verzeichnis­struktur

<path scriptRoot="path-to-script-root"></path>

<overshoot>

Beim Anfahren der Position 0% bzw. 100% eines Rollos wird diese möglicherweise nicht exakt erreicht weil entweder stroke­time nicht genau stimmt oder durch wieder­holtes Anfahren von Zwischen­positionen sich die tat­sächliche Position von der berech­neten unter­scheidet. Des­halb wird bei 0% und 100% die errech­nete Zeit um diesen Wert ver­längert. Das einzige Attri­but ist "time" (in ms):

<over­shoot time="5000"></overshoot>

ergibt eine um 5 Sekunden verlän­gerte Fahr­zeit bei den End­positionen.
Die maximal mög­liche Zeit ist 65 Sekunden.

<sendDelay>

In früheren Ver­sionen wurde stets ein 200ms-delay nach dem Senden eines Telegramms (z.B. bei ask()) eingefügt. Ab sofort kann diese Zeit konfi­guriert werden. Dazu ist die Zeile

<sendDelay default="500"></sendDelay>

einzu­fügen. Die Angabe ist in Milli­sekunden. Der Default ist 200ms. Maximal sind 65535 Milli­sekunden möglich.

Optionale group-Elemente

Die folgenden Elemente müssen innerhalb eines <grp>...</grp> Elementes ange­geben werden.

<invalidates>

setzt den Zustand einer oder meherer Gruppen auf "unbekannt". Der Portserver wird also beim nächsten Zu­griff auf diese Gruppe auf dem Bus danach fragen.

<invalidates> group [...] </invalidates>

Sie sollten z.B. den Helligkeitswert eines Dim­mers auf "unbekannt" setzen wenn ein "heller" oder "dunkler" Kom­mando empfangen wurde.
Sie können hier mehrere Gruppen angeben.

<stops>

dies betrifft nur Rollos. Geben Sie hier die Gruppe des Rollos an, der den Zustand verfolgt. Das <stops>-Element steht also in der Gruppe mit dem Stop­kommando und group ist die Gruppe mit dem dazugehörigen Startkommando.

<stops> group </stops>

Hier kann nur eine Gruppe angegeben werden. Wenn Sie Gruppen haben, die mehrere Rollos stoppen, verwenden Sie <controls>. Aus dieser Angabe wird intern gleich­zeitig ein stopped-by für die Start­gruppe gebil­det, das wichtig ist um beim Anfahren einer bestim­mten absoluten Position den Rollo anhalten zu können.

<controls>

einige Gruppen betref­fen mehr als einen Aktor. Hier können Sie eine Liste angeben.

<controls> group [...] </controls>

<trigger>

Sie können externe Programme beim Empfang eines Tele­grams starten:

<trigger cmd="somecommand %v" name="myname"> </trigger>

führt das somecommand-Programm mit dem aktuellen Wert als Parameter aus. Der Wert ist eine Zahl ohne Einheit.
Named triggers können eingefügt und wieder ent­fernt werden während rleibd läuft. Der "name"-Parameter ist optional. Wenn Sie ihn angeben, müssen Sie einen ein­deutigen Namen wählen und Sie können den Trigger hinterher durch Angabe seines Namens löschen. Unbe­nannte Trig­ger können nicht gelöscht werden. Wenn Sie einen Trigger löschen, wird ein eventuell bereits laufendes Programm dieses Triggers nicht beendet aber es wird kein neues mehr gestartet.
Sie können mehrere Trigger pro Gruppe angeben.

<reminder>

Ein Reminder führt ein externes Pro­gramm aus sobald sich eine Gruppe für eine bestimmte Zeit in einem bestimmten Bereich befindet.

<reminder cmd="somecommand" low="low value" high="high value" time="time" repeat="repeat"> </reminder>

Dies bedeutet dass wenn der Wert für die Gruppe für länger als time Sekunden zwischen low und high (ein­schließlich) ist das somecommand Ausge­führt wird. Wenn die Gruppe den Bereich nicht ver­lässt wird die Aus­führung danach alle repeat Sekunden wiederholt.
Um Sie daran zu erinnern, das Fenster im Bad zu schließen können Sie z.B. time=600 und repeat=300 setzen. Wenn das Fenster nun mehr als 10 Minuten offen ist wird z.B. alle 5 Minuten ein Script gestartet das Ihre Klingel zweimal kurz hinter­einander betätigt. Das geht solange bis Sie das Fenster endlich schließen.
Sie können damit auch sehr langsame Abdunklungen (Sonnen­untergänge) realisieren: Setzen Sie high auf 99 und low auf 1 und benutzen Sie das somecommand um das Licht ein wenig dunkler zu machen. So lange die Helligkeit 100% ist wird nichts passieren. Nun dimmen Sie ein klein wenig ab und das Licht wird dunkler und dunkler werden bis es schließlich aus ist.
Sie können Reminder als Zeit­schalter für jedes Licht verwenden. Da es normalerweise nicht nötig ist, daß ein Licht für mehr als 12 Stunden leuchtet können Sie einen Reminder setzen der es danach einfach aus­schaltet. Das Licht in Ihrer Abstell­kammer wird nie mehr zwei Wochen lang brennen während Sie auf Mallorca sind.
Sie können mehrere Reminder pro Gruppe definieren.
Intern ist ein Reminder ein thread, der gestartet wird wenn die Gruppe den Bereich betritt und beendet wird wenn sie ihn wieder verlässt.

low ist standardmäßig high wenn es weg­gelassen wird und high ist standard­mäßig 0.

Optionale group-Attribute

ask

Bedeutet daß die Gruppe in den Asker-Prozess einge­bunden werden soll. Ihr Wert wird regelmäßig abgefragt. Setzen Sie das ask-Attribut nur bei Gruppen, auf die nur ein einziges Gerät antwortet. Andern­falls werden uner­wartete (aber meist harmlose) Reak­tionen Ihres Eib-Systems erfolgen.

nomismatch

Abweichungen des Gruppenwertes (des Wertes im Speicher und des auf dem Bus emp­fangenen Wertes) werden nicht geloggt. Das ist z.B. für Temperatur­sensoren nützlich da sie nicht jede kleine Änderung auf dem Bus verkünden aber bei der Abfrage evtl. mit einem minimal anderen Wert als dem zuletzt gesen­deten Ant­worten. Dadurch wird die Syslog-Größe ver­ringert.

logvalues

jeder Aufruf von setValue() dieser Gruppe wird geloggt. Hinweis: setValues die aufgrund des Asker-Prozesses erfolgen werden unterdrückt.

stroketime

gilt nur für Rollos. Sie geben damit die Zeit an, die der Rollo für die volle Bewegung (von offen nach geschlossen) benötigt. Das müssen Sie für jeden Rollo einmal stoppen. Nur mit Kenntnis dieser Zeit­spanne kann rleibd die Position in Prozent berechnen oder eine bestimmte Position anfahren.

Komplettes Beispiel

<?xml version="1.0"?>
<eib>
    <par>
        <phys device="/dev/eib"> </phys>
    </par>
    <grp adr="1.2.3" type="OPENCLOSE" name="Main door" ask="1" logvalues="1">
        <trigger cmd="/usr/bin/rrdtool update /usr/local/etc/rrdtool/maindoor.rrd N:%v"> </trigger>
        <reminder cmd="/usr/local/bin/ringbell" high="1" time="600"> </reminder>
    </grp>
    <grp adr="1.1.6" type="UPDOWN" name="Shutter living room south" stroketime="21500">
    </grp>
    <grp adr="1.1.7" type="UPDOWN" name="Shutter living room south stop">
        <stops> 1.1.6 </stops>
    </grp>
    <grp adr="1.1.8" type="UPDOWN" name="Shutter living room west" stroketime="21500">
    </grp>
    <grp adr="1.1.9" type="UPDOWN" name="Shutter living room west stop">
        <stops> 1.1.8 </stops>
    </grp>
    <grp adr="1.1.14" type="UPDOWN" name="Shutters living room">
        <controls> 1.1.6  1.1.8 </controls>
    </grp>
    <grp adr="1.1.15" type="UPDOWN" name="Shutters living room stop">
        <controls> 1.1.7  1.1.9 </controls>
    </grp>
</eib>

Erklärung:
Die Gruppe 1.2.3 ist vom Typ OPENCLOSE und heißt "Main door". Sie wird vom Asker-Prozess zyklisch abgefragt. Änderungen des Wertes werden geloggt (so können Sie hinterher sehen, wann genau die Ein­brecher ihre Tür geöffnet und alle Möbel heraus­getragen haben...). Sie triggert ein externes Programm das eine rrdtool-Datenbank erzeugt um später eine nette Grafik davon zu bekommen. Außerdem wird ein Reminder gestartet wenn die Türe geöffnet wird der nach 10 Minuten "mach mich zu!" ruft.
Zusätz­lich sind zwei Rolos definiert, die beide 21.5s für die gesamte Bewegung benötigen und zwei Pseudo­gruppen die beide mit nur einem Schalter kontrol­lieren.
Hinweis: die erste Zeile "<?xml..." ist Pflicht.

somecommand

In den vorstehenden Definitionen wird ein externes Kommando stets als "somecommand" bezeich­net. Dies kann der voll­ständige Pfad einer beliebigen ausführbaren Datei sein, die im Kontext des Users ausgeführt wird, der auch rleibd ausführt. Dies bedingt auch eine ernst­hafte Gefahr. Bitte lesen Sie deshalb unbedingt die Sicherheits­seite!
Da so ein Kommando oftmals nur ein einziges Eib-Kommando ausführen muß und es normalerweise nicht viel Sinn macht, einen Kommentar auszuführen, wird jedes Kommando, das mit einem Doppel­kreuz ("#") beginnt nicht als Programm in einer Shell ausge­führt sondern direkt an den Port­server geschickt (natürlich ohne das Doppel­kreuz). Ein Kommando cmd="#/eib/grp/1.2.3?val=0" wird also den Wert der Gruppe 1.2.3 auf "0" setzen. Das spart nicht nur Ressourcen sondern ver­ringert auch erheblich die Anzahl der Skripte in ihrem Skript­verzeichnis.
Wenn das Kommando mit einem Ausrufe­zeichen ("!") beginnt wird es als Script betrachtet. Das Ausrufe­zeichen wird entfernt und der Rest in Ihrem Script-Verzeichnis gesucht. Sie können keine Parameter ("%v") an ein Script übergeben. Als Neben­effekt können Sie jedoch den Namen ihres Script­files z.B. "myscript.1.eib" nennen und es wird nur gefunden wenn der Wert "1" ist und Sie es als "!myscript.%25v.eib" einfügen. Aber dies ist nur ein Neben­effekt und Sie sollten dies nicht ausgiebig nutzen da diese Funktion für zukünftige Ver­sionen nicht garan­tiert ist...

Abfragen der Konfi­guration

Die tatsächliche Konfiguration können Sie wiederum als XML-Datei abfragen. Durch den Request

/def/eibdef.xml

liefert Ihnen rleibd eine XML-Datei mit den Werten die aktuell definiert sind. Es ist keine tatsächlich existierende Datei, rleibd erzeugt sie life aus dem aktuellen Inhalt seiner Konfiguration.
Gängige Browser zeigen diese Datei als Baum­struktur an. Sie können sie natür­lich auch auf Ihrem Com­puter ablegen indem Sie einen Link darauf setzen und ihn mit der rechten Maus­taste anklicken.
Dies ist nützlich für Debug­zwecke, reflektiert aber auch das aktuelle Vorhanden­sein von z.B. Triggern, die im laufenden Betrieb eingefügt und gelöscht werden können. Sehen Sie sich dazu das Script in trigger­list.html im Verzeichnis "examples" an, das eine ent­sprechende Aus­wertung der Datei vornimmt.