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>
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":
<log>
erlaubt detaillierte Angaben, was Sie in Ihrem Syslog sehen wollen und
was nicht.
Weitere Informationen zum Loggen (nur auf Englisch)
![]() |
Hinweis: damit "par" funktioniert muss "log" vor allen anderen Parametern in der eibdef.xml stehen! |
<path>
enthält optionale Informationen über die Verzeichnisstruktur
- scriptRoot zeigt auf das Verzeichnis in dem Ihre Scripte liegen. Standardwert ist /usr/local/etc/rleibd/.
<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):
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
Optionale group-Elemente
![]() |
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.
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.
<controls>
einige Gruppen betreffen mehr als einen Aktor. Hier können Sie eine Liste angeben.<trigger>
Sie können externe Programme beim Empfang eines Telegrams
starten:
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.
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.
![]() |
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
<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
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.

