Konfiguration
erfolgt über eine XML-Datei. eibdef.xml
ist die zentrale Definition
für Ihre KNX/EIB-
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
:
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.
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: 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 Skripte 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):
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 200 ms-delay nach dem Senden eines Telegramms (z.B. bei ask()) eingefügt. Ab sofort kann diese Zeit konfiguriert werden. Dazu ist die Zeile
einzufügen. Die Angabe ist in Millisekunden. Der Default ist 200 ms. Maximal sind 65535 Millisekunden möglich.
Optionale group- Elemente
Die folgenden Elemente müssen innerhalb eines <grp>...</grp> Elementes angegeben werden.
<invalidates>
setzt den Zustand einer oder mehrerer Gruppen auf unbekannt
.
Der
Portserver wird also beim nächsten Zugriff auf diese Gruppe auf dem Bus
danach fragen.
Sie sollten z.B. den Helligkeitswert 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.
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.
<trigger>
Sie können externe Programme beim Empfang eines Telegrams starten:
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ährend 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.
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 Skript 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-
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-
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-mach mich zu!
ruft.
Zusätzlich sind zwei Rolos definiert, die beide 21.5 s 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-#
)
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
Skript betrachtet. Das Ausrufezeichen wird entfernt und der Rest in Ihrem
Skript-%v
) an ein Skript
übergeben. Als Nebeneffekt können Sie jedoch den Namen ihres Skriptfiles
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
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 Skript in
triggerlist.html im Verzeichnis examples
an, das eine entsprechende
Auswertung der Datei vornimmt.