Konfiguration

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

<grp adr="4.2.3" type="OPENCLOSE" name="Fenster Wohnzimmer">
</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-Elemente

im <par>-Element werden Parameter definiert, die während der Laufzeit von rleibd konstant oder für den Start vordefiniert sind. Innerhalb des <par>...</par>-Elements sind folgende Unterelemente definiert:

<phys>

beschreibt die physikalische Anbindung Ihrer Installation (das Interface). Das bisher einzige Attribut ist "device":

<phys device="(path-to-your-eibdevice)"></phys>
das standardmäßig /dev/eib lautet wenn Sie es nicht anders angeben.

<log>

erlaubt detaillierte 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 debuggen wollen auf "9". Fehler und kritische Ereignisse werden immer geloggt.
Weitere Informationen zum Loggen (nur auf Englisch)
Hinweis Hinweis: damit "par" funktioniert muss "log" vor allen anderen Parametern in der eibdef.xml stehen!

<path>

enthält optionale Informationen über die Verzeichnisstruktur

<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 stroketime nicht genau stimmt oder durch wiederholtes Anfahren von Zwischenpositionen sich die tatsächliche Position von der berechneten unterscheidet. Deshalb wird bei 0% und 100% die errechnete Zeit um diesen Wert verlängert. Das einzige Attribut ist "time" (in ms):

<overshoot time="5000"></overshoot>
ergibt eine um 5 Sekunden verlängerte Fahrzeit bei den Endpositionen.
Die maximal mögliche Zeit ist 65 Sekunden.

<sendDelay>

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

<sendDelay default="500"></sendDelay>
einzufügen. Die Angabe ist in Millisekunden. Der Default ist 200ms. Maximal sind 65535 Millisekunden möglich.

Optionale group-Elemente

Hinweis Die folgenden Elemente müssen innerhalb eines <grp>...</grp> Elementes angegeben werden.

<invalidates>

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

<invalidates> group [...] </invalidates>
Sie sollten z.B. den Helleigkeitswert eines Dimmers auf "unbekannt" setzen wenn ein "heller" oder "dunkler" Kommando 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 Stopkommando 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 gleichzeitig ein stopped-by für die Startgruppe gebildet, das wichtig ist um beim Anfahren einer bestimmten absoluten Position den Rollo anhalten zu können.

<controls>

einige Gruppen betreffen mehr als einen Aktor. Hier können Sie eine Liste angeben.
<controls> group [...] </controls>

<trigger>

Sie können externe Programme beim Empfang eines Telegrams 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 entfernt werden währen rleibd läuft. Der "name"-Parameter ist optional. Wenn Sie ihn angeben, müssen Sie einen eindeutigen Namen wählen und Sie können den Trigger hinterher durch Angabe seines Namens löschen. Unbenannte Trigger 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 Programm 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 (einschließlich) ist das somecommand Ausgeführt wird. Wenn die Gruppe den Bereich nicht verlässt wird die Ausfü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 hintereinander betätigt. Das geht solange bis Sie das Fenster endlich schließen.
Sie können damit auch sehr langsame Abdunklungen (Sonnenuntergä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 Zeitschalter 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 ausschaltet. Das Licht in Ihrer Abstellkammer 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.
Hinweis low ist standardmäßig high wenn es weggelassen wird und high ist standardmäßig 0.

Optionale group-Attribute

ask

Bedeutet daß die Gruppe in den Asker-Prozess eingebunden werden soll. Ihr Wert wird regelmäßig abgefragt. Setzen Sie das ask-Attribut nur bei Gruppen, auf die nur ein einziges Gerät antwortet. Andernfalls werden unerwartete (aber meist harmlose) Reaktionen Ihres Eib-Systems erfolgen.

nomismatch

Abweichungen des Gruppenwertes (des Wertes im Speicher und des auf dem Bus empfangenen Wertes) werden nicht geloggt. Das ist z.B. für Temperatursensoren 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 gesendeten antworten. Dadurch wird die Syslog-Größe verringert.

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 Zeitspanne 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 Einbrecher ihre Tür geöffnet und alle Möbel herausgetragen 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ätzlich sind zwei Rolos definiert, die beide 21.5s für die gesamte Bewegung benötigen und zwei Pseudogruppen die beide mit nur einem Schalter kontrollieren.
Hinweis: die erste Zeile "<?xml..." ist Pflicht.

somecommand

In den vorstehenden Definitionen wird ein externes Kommando stets als "somecommand" bezeichnet. Dies kann der vollstä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 ernsthafte Gefahr. Bitte lesen Sie deshalb unbedingt die Sicherheitsseite!
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 Doppelkreuz ("#") beginnt nicht als Programm in einer Shell ausgeführt sondern direkt an den Portserver geschickt (natürlich ohne das Doppelkreuz). 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 verringert auch erheblich die Anzahl der Skripte in ihrem Skriptverzeichnis.
Wenn das Kommando mit einem Ausrufezeichen ("!") beginnt wird es als Script betrachtet. Das Ausrufezeichen wird entfernt und der Rest in Ihrem Script-Verzeichnis gesucht. Sie können keine Parameter ("%v") an ein Script übergeben. Als Nebeneffekt können Sie jedoch den Namen ihres Scriptfiles 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 Nebeneffekt und Sie sollten dies nicht ausgiebig nutzen da diese Funktion für zukünftige Versionen nicht garantiert ist...

Abfragen der Konfiguration

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 Baumstruktur an. Sie können sie natürlich auch auf Ihrem Computer ablegen indem Sie einen Link darauf setzen und ihn mit der rechten Maustaste anklicken.
Dies ist nützlich für Debugzwecke, reflektiert aber auch das aktuelle Vorhandensein von z.B. Triggern, die im laufenden Betrieb eingefügt und gelöscht werden können. Sehen Sie sich dazu das Script in triggerlist.html im Verzeichnis "examples" an, das eine entsprechende Auswertung der Datei vornimmt.