Konfiguration

er­folgt über ei­ne XML-Da­tei. eibdef.xml ist die zen­tra­le De­fi­ni­tion für Ih­re KNX/EIB-In­stal­la­tion. Sie wird er­war­tet in /usr/local/etc/rleibd. Zu­min­dest müs­sen hier al­le Grup­pen Ihrer In­stal­la­tion auf­ge­lis­tet sein. Sehen Sie sich die Bei­spiel-XML-Da­tei an und Sie wer­den ver­ste­hen, wie das geht.
Im Ele­ment <eib> be­fin­den sich Ele­men­te für je­de Ihrer Grup­pen. Jede Grup­pe muß min­des­tens ei­ne Grup­pen­adres­se, ei­nen Typ und ei­nen Na­men be­sit­zen.

<grp adr="4.2.3" type="OPENCLOSE" name="Fens­ter Wohn­zim­mer">
</grp>

Typen

gül­ti­ge type-At­tri­bu­te 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

Op­ti­o­na­le Ele­men­te und At­tri­bu­te sind wie folgt:

Op­ti­o­na­le par-Ele­men­te

im <par>-Ele­ment wer­den Pa­ra­me­ter de­fi­niert, die wäh­rend der Lauf­zeit von rleibd kon­stant oder für den Start vor­de­fi­niert sind. In­ner­halb des <par>...</par>-Ele­ments sind fol­gen­de Unter­ele­men­te de­fi­niert:

<phys>

be­schreibt die phy­si­ka­li­sche An­bin­dung Ihrer In­stal­la­tion (das In­ter­face). Das bis­her ein­zi­ge At­tri­but ist device:

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

das stan­dard­mä­ßig /dev/eib lau­tet wenn Sie es nicht an­ders an­ge­ben.

<log>

er­laubt de­tail­lier­te An­ga­ben, was Sie in Ihrem Syslog se­hen wol­len und was nicht.

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

Die Na­men der At­tri­bu­te spre­chen für sich, die Zahl gibt den Log-Le­vel an. 0 be­deu­tet kein Log­ging, hö­he­re Zah­len er­ge­ben mehr und mehr De­tail­in­for­ma­tion. All­ge­mein kann man sa­gen, wenn Sie se­hen wol­len was vor sich geht, set­zen Sie den Wert auf 1, wenn Sie de­bug­gen wol­len auf 9. Feh­ler und kri­ti­sche Er­eig­nis­se wer­den im­mer ge­loggt.
Wei­te­re In­for­ma­tio­nen zum Loggen (nur auf Eng­lisch)

Hin­weis: da­mit par funk­tio­niert muss log vor al­len an­de­ren Pa­ra­me­tern in der eibdef.xml ste­hen!

<path>

ent­hält op­tio­na­le In­for­ma­tio­nen über die Ver­zeich­nis­struk­tur

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

<overshoot>

Beim An­fah­ren der Po­si­tion 0% bzw. 100% ei­nes Rol­los wird die­se mög­li­cher­wei­se nicht ex­akt er­reicht weil ent­we­der stroketime nicht ge­nau stimmt oder durch wie­der­hol­tes An­fah­ren von Zwi­schen­po­si­tio­nen sich die tat­säch­­li­che Po­si­tion von der be­rech­ne­ten un­ter­schei­det. Des­halb wird bei 0% und 100% die er­rech­ne­te Zeit um die­sen Wert ver­län­gert. Das ein­zi­ge At­tri­but ist "time" (in ms):

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

er­gibt ei­ne um 5 Se­kun­den ver­län­ger­te Fahr­zeit bei den End­po­si­ti­o­nen.
Die ma­xi­mal mög­li­che Zeit ist 65 Se­kun­den.

<sendDelay>

In frü­he­ren Ver­sio­nen wur­de stets ein 200 ms-delay nach dem Senden ei­nes Te­le­gramms (z.B. bei ask()) ein­ge­fügt. Ab so­fort kann die­se Zeit kon­fi­gu­riert wer­den. Dazu ist die Zei­le

<sendDelay de­fault="500"></sendDelay>

ein­zu­fü­gen. Die An­ga­be ist in Mil­li­se­kun­den. Der De­fault ist 200 ms. Ma­xi­mal sind 65535 Mil­li­se­kun­den mög­lich.

Op­ti­o­na­le group-Ele­men­te

Die fol­gen­den Ele­men­te müs­sen in­ner­halb ei­nes <grp>...</grp> Ele­men­tes an­ge­ge­ben wer­den.

<invalidates>

setzt den Zu­stand ei­ner oder meh­re­rer Grup­pen auf un­be­kannt. Der Port­ser­ver wird al­so beim nächs­ten Zu­griff auf die­se Grup­pe auf dem Bus da­nach fra­gen.

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

Sie soll­ten z.B. den Hel­lig­keits­wert ei­nes Dim­mers auf un­be­kannt set­zen wenn ein hel­ler oder dunk­ler Kom­man­do emp­fan­gen wur­de.
Sie kön­nen hier meh­re­re Grup­pen an­ge­ben.

<stops>

dies be­trifft nur Rol­los. Geben Sie hier die Grup­pe des Rol­los an, der den Zu­stand ver­folgt. Das <stops>-Ele­ment steht al­so in der Grup­pe mit dem Stop­kom­man­do und group ist die Grup­pe mit dem da­zu­ge­hö­ri­gen Start­kom­mando.

<stops> group </stops>

Hier kann nur ei­ne Grup­pe an­ge­ge­ben wer­den. Wenn Sie Grup­pen ha­ben, die meh­re­re Rol­los stop­pen, ver­wen­den Sie <con­trols>. Aus die­ser An­ga­be wird in­tern gleich­zei­tig ein stopped-by für die Start­grup­pe ge­bil­det, das wich­tig ist um beim An­fah­ren ei­ner be­stimm­ten ab­so­lu­ten Po­si­tion den Rol­lo an­hal­ten zu kön­nen.

<con­trols>

ei­ni­ge Grup­pen be­tref­fen mehr als ei­nen Ak­tor. Hier kön­nen Sie ei­ne Lis­te an­ge­ben.

<con­trols> group [...] </con­trols>

<trigger>

Sie kön­nen ex­ter­ne Pro­gram­me beim Emp­fang ei­nes Te­le­grams star­ten:

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

führt das somecommand-Pro­gramm mit dem ak­tu­el­len Wert als Pa­ra­me­ter aus. Der Wert ist ei­ne Zahl oh­ne Ein­heit.
Named triggers kön­nen ein­ge­fügt und wie­der ent­fernt wer­den wäh­rend rleibd läuft. Der name-Pa­ra­me­ter ist op­tio­nal. Wenn Sie ihn an­ge­ben, müs­sen Sie ei­nen ein­deu­ti­gen Na­men wäh­len und Sie kön­nen den Trig­ger hin­ter­her durch An­ga­be sei­nes Namens lö­schen. Un­be­nann­te Trig­ger kön­nen nicht ge­löscht wer­den. Wenn Sie ei­nen Trig­ger lö­schen, wird ein even­tu­ell be­reits lau­fen­des Pro­gramm die­ses Trig­gers nicht be­en­det aber es wird kein neu­es mehr ge­star­tet.
Sie kön­nen meh­re­re Trig­ger pro Grup­pe an­ge­ben.

<reminder>

Ein Re­minder führt ein ex­ter­nes Pro­gramm aus so­bald sich ei­ne Grup­pe für ei­ne be­stimm­te Zeit in ei­nem be­stimm­ten Be­reich be­fin­det.

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

Dies be­deu­tet dass wenn der Wert für die Grup­pe für län­ger als time Se­kun­den zwi­schen low und high (ein­schließ­lich) ist das somecommand Aus­ge­führt wird. Wenn die Grup­pe den Be­reich nicht ver­lässt wird die Aus­füh­rung da­nach al­le repeat Se­kun­den wie­der­holt.
Um Sie da­r­an zu er­in­nern, das Fens­ter im Bad zu schlie­ßen kön­nen Sie z.B. time=600 und repeat=300 set­zen. Wenn das Fens­ter nun mehr als 10 Mi­nu­ten of­fen ist wird z.B. al­le 5 Mi­nu­ten ein Skript ge­star­tet das Ih­re Klin­gel zwei­mal kurz hin­ter­ein­an­der be­tä­tigt. Das geht so­lan­ge bis Sie das Fens­ter end­lich schlie­ßen.
Sie kön­nen da­mit auch sehr lang­sa­me Ab­dunk­lun­gen (Son­nen­un­ter­gän­ge) re­a­li­sie­ren: Set­zen Sie high auf 99 und low auf 1 und be­nut­zen Sie das somecommand um das Licht ein we­nig dunk­ler zu ma­chen. So lan­ge die Hel­lig­keit 100% ist wird nichts pas­sie­ren. Nun dim­men Sie ein klein we­nig ab und das Licht wird dunk­ler und dunk­ler wer­den bis es schließ­lich aus ist.
Sie kön­nen Re­minder als Zeit­schal­ter für je­des Licht ver­wen­den. Da es nor­ma­ler­wei­se nicht nö­tig ist, daß ein Licht für mehr als 12 Stun­den leuch­tet kön­nen Sie ei­nen Re­minder set­zen der es da­nach ein­fach aus­schal­tet. Das Licht in Ihrer Ab­stell­kam­mer wird nie mehr zwei Wo­chen lang bren­nen wäh­rend Sie auf Mal­lor­ca sind.
Sie kön­nen meh­re­re Re­minder pro Grup­pe de­fi­nie­ren.
Intern ist ein Re­minder ein thread, der ge­star­tet wird wenn die Grup­pe den Be­reich be­tritt und be­en­det wird wenn sie ihn wie­der ver­lässt.

low ist stan­dard­mä­ßig high wenn es weg­ge­las­sen wird und high ist stan­dard­mä­ßig 0.

Op­ti­o­na­le group-At­tri­bu­te

ask

Be­deu­tet daß die Grup­pe in den Asker-Pro­zess ein­ge­bun­den wer­den soll. Ihr Wert wird re­gel­mä­ßig ab­ge­fragt. Set­zen Sie das ask-At­tri­but nur bei Grup­pen, auf die nur ein ein­zi­ges Gerät ant­wor­tet. An­dern­falls wer­den un­er­war­te­te (aber meist harm­lo­se) Re­ak­tio­nen Ihres Eib-Sys­tems er­fol­gen.

nomismatch

Ab­wei­chun­gen des Grup­pen­wertes (des Wer­tes im Spei­cher und des auf dem Bus emp­fang­en­en Wer­tes) wer­den nicht ge­loggt. Das ist z.B. für Tem­pe­ra­tur­sen­so­ren nütz­lich da sie nicht je­de klei­ne Än­de­rung auf dem Bus ver­kün­den aber bei der Ab­fra­ge evtl. mit ei­nem mi­ni­mal an­de­ren Wert als dem zu­letzt ge­sen­de­ten Ant­wor­ten. Da­durch wird die Syslog-Grö­ße ver­rin­gert.

logvalues

je­der Auf­ruf von setValue() die­ser Grup­pe wird ge­loggt. Hin­weis: setValues die auf­grund des Asker-Pro­zes­ses er­fol­gen wer­den un­ter­drückt.

stroketime

gilt nur für Rol­los. Sie ge­ben da­mit die Zeit an, die der Rol­lo für die volle Be­we­gung (von of­fen nach ge­schlos­sen) be­nö­tigt. Das müs­sen Sie für je­den Rol­lo ein­mal stop­pen. Nur mit Kennt­nis die­ser Zeit­span­ne kann rleibd die Po­si­tion in Pro­zent be­rech­nen oder ei­ne be­stimm­te Po­si­tion an­fah­ren.

Kom­plet­tes Bei­spiel

<?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">
        <con­trols> 1.1.6  1.1.8 </con­trols>
    </grp>
    <grp adr="1.1.15" type="UPDOWN" name="Shutters living room stop">
        <con­trols> 1.1.7  1.1.9 </con­trols>
    </grp>
</eib>

Er­klä­rung:
Die Grup­pe 1.2.3 ist vom Typ OPENCLOSE und heißt Main door. Sie wird vom Asker-Pro­zess zy­klisch ab­ge­fragt. Än­de­run­gen des Wer­tes wer­den ge­loggt (so kön­nen Sie hin­ter­her se­hen, wann ge­nau die Ein­bre­cher ih­re Tür ge­öff­net und al­le Mö­bel he­r­aus­ge­tra­gen ha­ben...). Sie trig­gert ein ex­ter­nes Pro­gramm das ei­ne rrdtool-Da­ten­bank er­zeugt um spä­ter ei­ne net­te Gra­fik da­von zu be­kom­men. Au­ßer­dem wird ein Re­minder ge­star­tet wenn die Tü­re ge­öff­net wird der nach 10 Mi­nu­ten mach mich zu! ruft.
Zu­sätz­lich sind zwei Rolos de­fi­niert, die bei­de 21.5 s für die ge­sam­te Be­we­gung be­nö­ti­gen und zwei Pseu­do­grup­pen die bei­de mit nur ei­nem Schal­ter kon­trol­lie­ren.
Hin­weis: die ers­te Zei­le <?xml... ist Pflicht.

somecommand

In den vor­ste­hen­den De­fi­ni­tio­nen wird ein ex­ter­nes Kom­man­do stets als somecommand be­zeich­net. Dies kann der voll­stän­di­ge Pfad ei­ner be­lie­bi­gen aus­führ­ba­ren Da­tei sein, die im Kon­text des Users aus­ge­führt wird, der auch rleibd aus­führt. Dies be­dingt auch ei­ne ernst­haf­te Ge­fahr. Bitte le­sen Sie des­halb un­be­dingt die Si­cher­heits­sei­te!
Da so ein Kom­man­do oft­mals nur ein ein­zi­ges Eib-Kom­man­do aus­füh­ren muß und es nor­ma­ler­wei­se nicht viel Sinn macht, ei­nen Kom­men­tar aus­zu­füh­ren, wird je­des Kom­man­do, das mit ei­nem Dop­pel­kreuz (#) be­ginnt nicht als Pro­gramm in ei­ner Shell aus­ge­führt son­dern di­rekt an den Port­ser­ver ge­schickt (na­tür­lich oh­ne das Dop­pel­kreuz). Ein Kom­man­do cmd=#/eib/grp/1.2.3?val=0 wird al­so den Wert der Grup­pe 1.2.3 auf 0 set­zen. Das spart nicht nur Res­sour­cen son­dern ver­rin­gert auch er­heb­lich die An­zahl der Skrip­te in ih­rem Skript­ver­zeich­nis.
Wenn das Kom­man­do mit ei­nem Aus­ru­fe­zei­chen (!) be­ginnt wird es als Skript be­trach­tet. Das Aus­ru­fe­zei­chen wird ent­fernt und der Rest in Ihrem Skript-Ver­zeich­nis ge­sucht. Sie kön­nen kei­ne Pa­ra­me­ter (%v) an ein Skript über­ge­ben. Als Ne­ben­ef­fekt kön­nen Sie je­doch den Na­men ih­res Skript­fi­les z.B. myscript.1.eib nen­nen und es wird nur ge­fun­den wenn der Wert 1 ist und Sie es als !myscript.%25v.eib ein­fü­gen. Aber dies ist nur ein Ne­ben­ef­fekt und Sie soll­ten dies nicht aus­gie­big nut­zen da die­se Funk­tion für zu­künf­ti­ge Ver­sio­nen nicht ga­ran­tiert ist...

Abfragen der Konfi­guration

Die tat­säch­­li­che Kon­fi­gu­ra­tion kön­nen Sie wie­der­um als XML-Da­tei ab­fra­gen. Durch den Request

/def/eibdef.xml

lie­fert Ihnen rleibd ei­ne XML-Da­tei mit den Wer­ten die ak­tu­ell de­fi­niert sind. Es ist kei­ne tat­säch­­lich exis­tie­ren­de Da­tei, rleibd er­zeugt sie life aus dem ak­tu­el­len In­halt sei­ner Kon­fi­gu­ra­tion.
Gän­gi­ge Brow­ser zei­gen die­se Da­tei als Baum­struk­tur an. Sie kön­nen sie na­tür­lich auch auf Ihrem Com­pu­ter ab­le­gen in­dem Sie ei­nen Link da­r­auf set­zen und ihn mit der rech­ten Maus­tas­te an­kli­cken.
Dies ist nütz­lich für De­bug­zwe­cke, re­flek­tiert aber auch das ak­tu­el­le Vor­han­den­sein von z.B. Trig­gern, die im lau­fen­den Be­trieb ein­ge­fügt und ge­löscht wer­den kön­nen. Sehen Sie sich da­zu das Skript in triggerlist.html im Ver­zeich­nis ex­am­ples an, das ei­ne ent­spre­chen­de Aus­wer­tung der Da­tei vor­nimmt.