Linux EIB Home Server

Dokumentation

 

 

Autoren:

Vladimir Vinarski (volodimir@users.sourceforge.net)

Jens Neumann (jneumann@users.sourceforge.net)

 

 

 

 

 

 

 

 

 

 

 

 


1Revisionsstand

Stand

Datum

Bearbeiter

Anlass

0.1

13.03.02

V.Vinarskyi

J. Neumann

Erstellung

0.2

16.06.03

J.Neumann

Dokumentation für SourceForge

0.3

01.04.04

V.Vinarski

J.Neumann

Ergänzungen und Korrekturen

0.4

21.06.04

J.Neumann

Teilweise neue Klassennamen und Anpassung der entsprechenden Abbildungen

2Offene Punkte & TODOs

·Beispielapplikationen

·Unterstützung aller EIB-Datentypen

·UPnP-Unterstützung

·Windows Version

·Internet-Anbindung

·Handy- / SMS-Interface

·BCU 1 Unterstützung

·...


3Inhaltsverzeichnis

1 Revisionsstand. 2

2 Offene Punkte & TODOs. 2

3 Inhaltsverzeichnis. 3

4 Abbildungsverzeichnis. 4

5 Einleitung. 5

5.1 Architektur 5

5.1.1 Die Schnittstellen zu Clients. 6

5.1.2 Die interne Schnittstelle „homeserver <-> homedriver“ 8

5.2 Dynamische Beschreibung. 9

5.2.1 Schnittstelle  zwischen Linux EIB Home Server und  EIB-Bus. 9

5.3 Beteiligte Dateien des homedriver und homeserver 10

5.4 Modulbeschreibung: homedriver 10

5.4.1 Kurzbeschreibung. 10

5.4.2 Klassen und deren Assoziationen. 11

5.4.3 Klassen, Attribute und Methoden. 13

5.4.4 Funktionen. 16

5.5 Modulbeschreibung: homeserver 16

5.5.1 Kurzbeschreibung. 16

5.5.2 Klassen und deren Assoziationen. 17

5.5.3 Klassen, Attribute und Methoden. 18

6 Literaturverzeichnis. 23

 


 

4Abbildungsverzeichnis

Abbildung 1 Kollaborationsdiagramm für den EIB Home Server. Die Grafik zeigt den Informationsfluss zwischen einer EIB-Installation und möglichen Anwendungen. 5

Abbildung 2: Die Klassen des homedrivers und deren Assoziationen. 12

Abbildung 3: Die Treiber-Klasse. 13

Abbildung 4: Die Verbindungsklasse. 13

Abbildung 5: Vererbungshierarchie der Zustands-Klassen. 14

Abbildung 6: Die Socketklasse. 15

Abbildung 7: Vererbungshierarchie der Nachrichten-Klassen. 15

Abbildung 8 Exceptions des homedrivers. 16

Abbildung 9 Klassendiagramm des homeserver. 18

Abbildung 10 Die Klasse HomeServer 18

Abbildung 12 Die Klasse DatenBank. 19

Abbildung 13 Die Klasse Driver. 19

Abbildung 14 Die Klasse DriverMessages. 20

Abbildung 15 Die Klasse Client. 20

Abbildung 16 Die Klasse ClientMessages. 21

Abbildung 17 Die Klasse Interest. 21

Abbildung 18 Die Klasse PathData. 22

Abbildung 19 Die Klasse Instruction. 22


Einleitung

Der Linux EIB Home Server bietet Schnittstellen für die Steuerung und Überwachung einer EIB-Installation.

Der Europäische Installationsbus (EIB)  dient der automatischen Steuerung der Funktionen in Wohn- und Zweckbauten. Der EIB trennt klar die Übertragung von elektrischer Energie und Information. Neben einem Stromnetz werden alle EIB-Sensoren und Aktoren über ein zusätzliches informationsübertragendes Netzwerk miteinander verbunden, über das der gesamte Informationsaustausch stattfindet.

Die Zuordnung zwischen Betätigungselement und Verbraucher ist über das Netzwerk programmierbar und beliebig oft veränderbar. Für den Betrieb wird kein zentrales Busmanagement benötigt. Die Verwaltung und Speicherung aller Daten erfolgt dezentralisiert in den einzelnen Busgeräten. Jedoch stehen alle Informationen des EIB-Netzes bei Bedarf an jedem Punkt lückenlos zur Verfügung, so dass eine Integration der Elektroinstallation in ein Überwachungs- und Steuerungssystem, z.B. Embassi [1], ohne zusätzliche Installationskosten möglich ist.

 

5.1Architektur

Der Home Server besteht im Wesentlichen aus zwei Komponenten (siehe Abbildung 1):

-homedriver: Steuerung des EIB-Bus und Kommunikationsschnittstelle zwischen dem Home-Server und den EIB-Bus, d.h. den Geräten.

-homeserver:  Kommunikationsschnittstelle zwischen den Anwendungsprogrammen, im Folgenden auch als Clients bezeichnet, und dem homedriver. Die Anzahl der Anwendungsprogramme  ist unbegrenzt.


Abbildung 1 Kollaborationsdiagramm für den EIB Home Server. Die Grafik zeigt den Informationsfluss zwischen einer EIB-Installation und möglichen Anwendungen

 


Nachrichten- bzw. Informations-Verlauf:

     EIB bus -> FT 1.2 Datenschnittstelle  -> homedriver  ->  homeserver  -> Clients

     Client -> homeserver  ->  homedriver  -> -> FT 1.2 Datenschnittstelle -> EIB-Bus

Bei den Clients ist prinzipiell zwischen normalen Anwendungsprogrammen und HTTP-Clients zu unterscheiden. Die Anzahl der Clients ist unbegrenzt.

Die beiden Komponenten homedriver und homeserver verwenden unterschiedliche zusätzliche Bibliotheken:

-lfc: Eine Collection -Klassen Bibliothek (Strings, HashMaps, Queues, Vectoren, ...) die intern vom homedriver benutzt wird.

-vector: Eine Collection-Klassen Bibliothek (String, Vector, Array, ...) die intern von homeserver benutzt wird.

-ixml: XML-DOM Parser (von Intel [2])

5.1.1Die Schnittstellen zu Clients

5.1.1.1EIB-HomeServer  <->  TCP/IP-Applikation ( Port 8081 )

Ein Client ist ein belibiger Prozess, der eine tcp/ip-Verbindung  zum  homeserver aufbaut und die in diesem Kapitel beschriebenen Befehle zum homeserver sendet.

Es gibt folgende Befehle:

·„read“ um momentane Zustände von EIB-Geräten, d.h. EIB-Gruppenadressen,  abzufragen.

·„write“ um den Zustand von EIB-Geräten, d.h. EIB-Gruppenadressen, zu setzen.

·„subscribe“ um vom Home-Server über jede Zustandsänderungen eines EIB-Gerätes, genauer einer EIB-Gruppenadresse, informiert zu werden.

·„unsubscribe“ um die ständige Benachrichtigung durch den Home-Server (siehe „subscribe“-Befehl) aufzuheben.

 

Beispiel READ:

Ziel: Den Wert der (Geräte mit der) Gruppenadresse 2/0/2 ermitteln.

Format:

<eib type="read" path="/eib/groups/2/0/2/curvalue"/>

Antwort vom HomeServer:

<eib state="true" path="database.value/eib/groups/2/0/2/curvalue" data="0"/>

(falls der momentane Wert der zugehörigen Gruppenadresse 0 beträgt.)

Fehlerantwort:

     <eib state="false" path="database.value/eib/groups/2/0/2" error="$error0007"/>

Fehlerantwort bei falschem Befehl:

     <eib state="false" error="instruction isn't correct"/>

 

Beispiel WRITE:

Ziel: Der Wert der Gruppenadresse 2/0/2 soll auf „11“ gesetzt werden., d.h. die zugehörigen Geräte entsprechend umgeschaltet.

Format:

<eib type="write" path="/eib/groups/2/0/2/curvalue" data="11">

Antwort vom HomeServer:

     <eib state="true" path="database.value/eib/groups/2/0/2/curvalue" data="11"/>

Fehlerantwort:  siehe READ.

    

Beispiel SUBSCRIBE:

Ziel: Der Client möchte den Wert der Gruppenadresse 2/1/0 überwachen,d.h über alle Änderungen (der Geräte mit) dieser Gruppenadresse informiert werden.

Format:

<eib type="subscribe" path="/eib/groups/2/1/0"/>

Antwort vom Home-Server:

     <eib state="true" type="subscribe" path="/eib/groups/2/1/0"/>

     Anschliessend bekommt der Client alle bestellten Nachrichten.

Fehlerantwort:  siehe READ.

 

Dieser Befehl unterstützt Platzhalter,  d.h. mit

<eib type="subscribe" path="*"/>

bestellt man alle Nachrichten vom EIB-Bus, d.h. alle Gruppenadressen werden überwacht.

Antwort vom Server:

<eib state="true" type="subscribe" path="*"/>

    

Beispiel UNSUBSCRIBE:

Ziel: Aufhebung eines SUBSCRIBE-Befehls.

Format:

<eib type="unsubscribe" path="/eib/groups/2/1/0"/>

Antwort vom Server:

<eib state="true" type="unsubscribe" path="/eib/groups/2/1/0"/>

 

Auch hier werden Platzhalter unterstützt, d.h. mit 

<eib type="unsubscribe" path="*"/>

bestellt man alle Nachrichten vom EIB-Bus ab.

Antwort vom Server:    

<eib state="true" type="unsubscribe" path="*"/>

Bemerkungen:

     Die Verbindung zum Client besteht bis der Client selber die Socketverbindung schliesst.

Der Read-Befehl wirkt gleichzeitig als SUBSCRIBE-Befehl !!!

    

5.1.1.2EIB-Home-Server <-> HTTP-Applikation  (Port 8080)

Format des Befehles (wenn der Home-Server auf einem Rechner mit der IP-Adresse 192.168.169.33 läuft):

http://192.168.169.33:8080/eibhomeserver?instruction=<eib type="read" path="/eib/groups/2/0/2/curvalue"/>

Nach instruction= muß entweder der oben beschriebene vollständige READ- oder WRITE-Befehl (siehe voriges Kapitel) folgen. Ein HTTP-Client kann keine SUBSCRIBE- oder UNSUBSCRIBE-Befehle auszuführen!

Antwort vom HomeServer:

     HTTP/1.0 200 OK
  Server: Loewe HomeServer 1.0
  MIME-version: 1.0
  Content-type: text/html

<html><script>var answer='<eib state="true" path="database.value/eib/groups/2/0/2/curvalue" data="11"/>’;</script></html>

Ein Beispiel für einen Write-Befehl:

http://192.168.169.33:8080/eibhomeserver?instruction=<eib type="write" path="/eib/groups/2/0/2/curvalue" data="11"/>

Antwort vom HomeServer:

     HTTP/1.0 200 OK
  Server: Loewe HomeServer 1.0
  MIME-version: 1.0
  Content-type: text/html

<html><script>var answer='<eib state="true" path="database.value/eib/groups/2/0/2/curvalue" data="11"/>';</script></html>

Fehlerantwort:

     HTTP/1.0 200 OK
  Server: Loewe HomeServer 1.0
  MIME-version: 1.0
  Content-type: text/html

<html><script>var answer='<eib state="false" error="instruction isn't correct"/>';</script></html>

 

Bemerkungen:

Die Verbindung  zur HTTP-Applikation wird nach der Antwort durch den Linux EIB Home Server geschlossen.

5.1.2Die interne Schnittstelle „homeserver <-> homedriver“

Zwischen homedriver und homeserver werden Datentelegramme folgenden Formats ausgetauscht  (siehe dazu auch EIBA Handbuch [3]):

Das Telegramm besteht aus 12 oder mehr Bytes:

Byte 0(type):  definiert den Typ des Telegrammes

     0: EIB-Message

     1: Interne Message zwischen homedriver und homeserver.

Byte 1 (total length): Gesammte Länge der Message vom 2. Byte bis zum Checksum-Byte.

Byte 2 (control field): defaultmäßig 0x9c.

Bytes 3, 4 (source address): definiert die Adresse der Quelle des Telegrammes

Bytes 5, 6 (group address): definiert die Adresse des Empfängers des Telegrammes

Bytes 7 (routing counter / length): Dieses Byte ist ein kombiniertes Feld, das aus dem Teil “routing  counter” und „data length“ besteht. Defaultmäßig ist routing counter = [110] und definiert die Bits Nummer 6,5 und 4. Das Bit 7 definiert  Gruppenadressierung bzw. physikalische Adressierung (1 bedeutet Gruppenadressierung). Die Bits 3, 2, 1 und 0 sind Längen- Bits und definieren die gesammte Anzahl Bytes für den übertragenden Wert. Bei length = 1 wird z.B. nur sogenannte short user data übertragen.

Byte 8 (transport control field / APCI ): defaultmäßig gleich 0, wobei die Bits 7, 6, 5, 4,  3, 2 zum transport control field gehören, die Bits 1 und 0 den Anfang des APCI definieren.

Byte 9 (APCI / short user data ): 2 Bits (Nummer 7 und 6) definieren den Rest des APCI und 6 Bits (Nummer 5, 4, 3, 2, 1, 0) das Feld short user data. Das Feld short user data wird nur dann verwendet, wenn der zu übertragen Wert mit 6 Bits dargestellt werden kann, sonst benutzt man das user data Byte (oder Bytes), welches die Nummer 10 hat (die Nummern 10, 11 hat).

Byte 10 (Bytes 10, 11, ... – user data):  Definiert die zu übertragen Daten, falls diese nicht mit 6 Bits dargestelt werden können.

Abschliessendes Byte (checksum): Eine spezielle Checksumme der Bytes von Byte 2 bis zum Checksum-Byte. Es wird die Bit-Funktion (not (b0 Å b1 Å b2 Å ... Å bn) ) verwendet, wobei  Å“ die Bit-Operation „xor“ bedeutet.

 

Der homedriver leitet  die Nachrichten vom homeserver auf den EIB-Bus weiter, wobei dem Telegramm zusätzliche Header der anderen OSI-Layer hinzugefügt  werden. (siehe EIBA-Handbuch [3])

5.2Dynamische Beschreibung

5.2.1Schnittstelle  zwischen Linux EIB Home Server und  EIB-Bus

Der homedriver kommuniziert mit dem EIB-Bus über eine FT1.2 kompatible Datenschnittstelle. Das FT1.2 Übertragungsprotokoll basiert auf den internationalen Standards IEC 870-5-1 und 870-5-2 (DIN 19244) (siehe EIBA Handbuch [3]). Der Anschluß der Schnittstelle an den PC erfolgt über die serielle Schnittstelle, der Anschluß an den EIB-Bus über eine sogenannte „Bus-Access-Unit“ (BAU) vom Typ 2 (siehe EIBA Handbuch, Kapitel 9/4/2, [3]). 

Der homedriver setzt die Datenschnittstelle in den sogenannten Busmonitor-Modus. In diesem Modus werden alle Nachrichten auf dem EIB-Bus an den  homedriver  weitergeleitet. Dadurch registriert der Linux EIB Home Server jede Änderung in der angeschlossenen EIB-Installation.

Jede Busmonitor-Nachricht wird vom homedriver  zum homeserver weitergeleitet. Andere Nachrichten werden vom homedriver verarbeitet.

5.3Beteiligte Dateien des homedriver und homeserver

Modul / Include-File / Source-File

Beschreibung

homeserver/include/client.h

homeserver/src/client.cpp

Kommunikation mit den verschiedenen Klienten. Klienten sind alle Programme, die den EIB-Bus steuern wollen oder Informationen über die EIB-Installation benötigen.

Lauschen nach neuen Klienten.

homeserver/include/homeserver.h

homeserver/src /datenbank.cpp

Kommunikation des homeservers mit einer internen Datenbank.

homeserver/include/homeserver.h

homeserver/src/driver.cpp

Kommunikation mit dem homedriver. Der homedriver stellt dem homeserver die Verbindung zum EIB-Bus zur Verfügung.

homeserver/include/homeserver.h

homeserver/src/homeserver.cpp

Die zentrale Klasse des homeservers. Verwaltet alle Prozesse im homeserver.

homedriver/main/eibmain.cpp

Main-Programm des homedrivers. Kann zum Starten des homedrivers verwendet werden. Der homedriver kann aber auch als Thread in einem anderen Programm aufgerufen werden.

homedriver/include/eibdriver.h

homedriver/src/eibdriver.cpp 

Zentrale Klasse des homedrivers. Startet alle Threads und Verwaltung sowohl die Verbindung zum homeserver als auch zum EIB-Bus.

homedriver/include/eibsocket.h

homedriver/src/eibsocket.cpp

Verbindung zum homeserver über einen Socket.

homedriver/include/ eibconnection .h

homedriver/src/eibconnection.cpp

Serielle RS232-Verbindung zum EIB-Bus.

homedriver/include/ eibstate .h

homedriver/src/eibstate.cpp

Status der FT1.2-Verbindung zum EIB-Bus

homedriver/include/ eibmessage .h homedriver/src/eibmessage.cpp

EIB-Nachrichtenformate

homedriver/include/eibexception .h

homedriver/src/eibexception.cpp

Fehler- und Ausnahmezustände

homedriver/include/ eibstd.h

Verschiedene Definitionen zur Fehlerausgabe oder Nachrichtenformate oder Standard-Schnittstellen und Ports.

5.4Modulbeschreibung: homedriver

5.4.1Kurzbeschreibung

Der homedriver hat zwei Aufgaben:

1.Er  empfängt  „Write“- und  „Read“-Anfragen sowie „Response“-Nachrichten von dem homeserver und leitet diese an den EIB-Bus weiter

a.Write: Der Wert einer Gruppenadresse wird in den entsprechenden Geräten verändert.

b.Read: Der Wert einer Gruppenadresse wird gelesen.

c.Response: Antwort auf einen Read-Befehl vom EIB-Bus. Dieser Befehl wird momentan vom homeserver nicht unterstützt, da er für keine Anwendung benötigt wird.

2.Der homedriver leitet empfangene „Busmonitor“-Nachrichten an den homeserver weiter.

Der homedriver kann als selbstandiges Programm gestartet werden oder in einem anderen Programm aufgerufen werden:

1.Selbstandiges Programm: Dazu kompiliert man die Datei eibmain.cpp und erhält ein ausführbares Programm. Beim Start können mehrere Parameter angegeben werden. Syntax:
homedriver [–d device] [–p portnumber] [–f inputfile outputfile]
device: Gibt die serielle Schnittstelle zum EIB-bus an, z.B.
/dev/ttyS4
portnumber: Gibt den Port für die Socketverbindung zum homeserver an.
inputfile, outputfile: Für Simulationszwecke kann aus bzw. in eine Datei gelesen bzw. geschrieben werden. Dieser Modus ist sinnvoll, wenn kein EIB-Anschluß zur Verfügung steht. Die Dateien müssen existieren. An einem reinen Simulationsmodus ohne Dateien wird gearbeitet. Die Option –f darf nicht mit –d angegeben werden.

Alle Parameter sind optional.

Ohne Parameter gelten die Defaultwerte:
device: /dev/ttyS0
portnumber: 8083

2.Aufruf von anderem Programm: Dazu instanziiert man ein Objekt des homedriver durch Aufruf der statischen Methode:
EibDriver::createInstance( int portNumber, char* inputDevice, char* outputDevice, bool simulation)
portnumber: Gibt den Port für die Socketverbindung zum homeserver an.
inputDevice: Gibt die serielle Schnittstelle zum EIB-bus an, z.B.
/dev/ttyS1, oder eine Eingabedatei.
outputDevice: Gibt die serielle Schnittstelle zum EIB-bus an, z.B.
/dev/ttyS1, oder eine Ausgabedatei.
simulation: True für Simulation, d.h. input/outputDevice sind Dateien. False für Realbetrieb, d.h input/ouputdevice gibt die gleiche serielle Schnittstelle an.

5.4.2Klassen und deren Assoziationen

Das Klassendiagramm in Abbildung 2 zeigt die Klassen des Moduls homedriver und die Beziehungen der einzelnen Klassen zueinander. Bis auf die beiden Klassen EibReceiveMessage und EibSendMessage, die die zu versendenden und empfangenen EIBNachrichten repräsentieren, sind alle anderen Klassen als Singleton realisiert. Aus diesem Grund entspricht das Klassendiagramm nahezu dem Objektdiagramm.

Der homedriver kommuniziert mit dem homeserver über einen Socket. Die Standardeinstellung für den Port ist 8083. Der Socket wird in der Klasse EibDriverSocket realisiert, von der ein Objekt instanziiert wird.

Ein Thread schreibt Nachrichten in den Socket und ein anderer Thread liest Nachrichten von dem Socket. Alle Nachrichten werden in zwei Nachrichtenschlangen gehalten, die durch die Klasse lfcdllist der LFC realisiert sind. Auf den EIB-Bus zu versendende Nachrichten werden durch die Klasse EibSendMessage implementiert und empfangene Nachrichten durch die Klasse EibReceiveMessage.

Der homedriver kommuniziert mit dem EIB-Bus über die serielle Schnittstelle. Während der Initialisierungsphase des Systems wird die FT1.2 Datenschnittstelle durch entsprechende Nachrichten in den Busmonitormodus geschaltet. Anschließend empfängt der homedriver sämliche Nachrichten, die auf dem EIB-Bus gesendet werden. Er quittiert jede Nachricht mit einem Acknowledge. Die Verbindung zum EIB-Bus wird durch die Klasse EibConnection repräsentiert. Der Zustand der Verbindung wird durch eine Klasse beschrieben, die sich von der abstrakten Basisklasse EibState ableitet.

 

Abbildung 2: Die Klassen des homedrivers und deren Assoziationen.

Momentan gibt es die Verbindungszustände

1.EibStateReady: Nachrichten können empfangen und versendet werden.

2.EibStateSent: Es ist ein Write- (siehe 1.a in Kapitel 5.4.1) oder Response-Befehl (siehe 1.c in  Kapitel 5.4.1) an die BAU versendet worden. Es kann keine weitere Nachricht versendet werden. Der homedriver wartet auf das Acknowledge der BAU. Wenn das Acknowledge empfangen wird, kehrt der homedriver in den State EibStateReady zurück. Wird innerhalb von 200ms kein Acknowledge empfangen, wird die Nachricht bis zu dreimal wiederholt. Nach vier erfolglosen Versuchen wird die gesamte Verbindung neu initialisiert.

3.EibStateRequest: Es ist ein Read-Befehl (siehe  in  Kapitel ) an die BAU versendet worden. Es kann keine weitere Nachricht versendet werden. Der homedriver wartet auf das Acknowledge der BAU. Wird innerhalb einer bestimmten Zeit kein Acknowledge empfangen, wird die Nachricht bis zu dreimal wiederholt. Nach vier erfolglosen Versuchen wird die gesamte Verbindung neu initialisiert.

4.EibStateWait: Ein Acknowledge für einen Read-Befehl wurde empfangen. Der homedriver wartet auf eine Response von einem Gerät. Es kann keine weitere Nachricht versendet werden. Wenn die Response empfangen wird oder nach einem bestimmten TimeOut (siehe EIBA Handbuch [3]), kehrt der homedriver in den State EibStateReady zurück.

Von allen empfangenen Busmonitor-Nachrichten wird der FT1.2-Protokoll-Rahmen, das Status-Byte und der TimeStamp entfernt und die Nachricht an den homeserver weitergeleitet. Vorher werden Wiederholungen aussortiert. Das Nachrichtenformat ist in Kapitel  beschriebenen.

5.4.3Klassen, Attribute und Methoden

5.4.3.1EibDriver

Die Methoden der Klasse EibDriver sind in Abbildung 3 dargestellt.

 

Abbildung 3: Die Treiber-Klasse

5.4.3.2EibConnection

Die Methoden der Klasse EibConnection sind in Abbildung 4 dargestellt.

Abbildung 4: Die Verbindungsklasse

5.4.3.3EibState

Die Methoden der Klasse EibState, und die zugehörige Vererbungshierarchie ist in Abbildung 5 dargestellt.

 

Abbildung 5: Vererbungshierarchie der Zustands-Klassen.

5.4.3.4EibSocket

Die Methoden der Klasse EibSocket sind in Abbildung 6 dargestellt.

 

Abbildung 6: Die Socketklasse

5.4.3.5EibMessage

Die Klasse EibMessage und die davon abgeleiteten Klassen sind in Abbildung 7 dargestellt.

 

Abbildung 7: Vererbungshierarchie der Nachrichten-Klassen.

5.4.3.6EibException

Die Klasse EibException und die davon abgeleiteten Klassen sind in Abbildung 7 dargestellt.

Abbildung 8 Exceptions des homedrivers.

 

5.4.4Funktionen

In dem Modul homedriver gibt es bis auf main() keine Funktionen, die nicht „Klassenmember-Methoden“ sind. Die Beschreibung der Klassenmember-Methoden“  findet man bei den jeweiligen Klassen.

Der homedriver lässt sich von außen entweder

·über die Methode run() der Klasse EibDriver

·oder über die Main-Routine in der Datei eibmain.cpp

starten (siehe dazu Kapitel ). Die Dokumentation der Klassen bzw. Methoden findet man im Quellcode.

5.5Modulbeschreibung: homeserver

5.5.1Kurzbeschreibung

Der homeserver hat zwei Aufgaben:

1.Er  kommuniziert über TCP/IP bzw. HTTP mit Applikationen (siehe Abschnitt 5.1.1)

2.Er kommuniziert mit dem homedriver (siehe voriger Abschnitt 5.4)

3.Er verwaltet die Datenbank mit den Gruppenadressen und aktuellen Werten.

 

Der homeserver speichert die aktuellen Werte der Gruppenadresse in einer XML-Datenbank. Die Datenbank wird in einer Datei (Defaultname:eibdb.xml) abgelegt. In diese Datei müssen bei der Installation des Servers einmalig die Daten der EIB-Installation eingetragen werden. Während des Betriebs werden die Werte der konfigurierten Gruppenadressen ständig in der Datenbank aktualisiert und die Datei eibdb.xml gelegentlich synchronisiert.

Die Synchronisationsintervalle können beim Start mit dem Parameter

-s <Anzahl in Sekunden>
angegeben werden ( Deafult: -s 300, d.h. Synchronisation alle 5 Minuten, falls überhaupt Änderungen vorliegen. Keine Synchronisation durch -s 0).

 

Syntax:

homeserver -dr driver-host -db database -dp driver-port -ap applications-port -wp http-port -s synctimeout

Beschreibung der Parameter:

driverhost: IP-Addresse oder Name des Rechners, auf dem der homedriver läuft (homedriver und homeserver können auf unterschiedlichen Rechnern gestartet werden.)

driver-port: IP-Port des homedrivers.

database: Name der Datenbank-Datei

applications-port: Port für TCP/IP-Anwendungen

http-port:Port für HTTP-Anwendungen

synctimeout: Synchronisations-Intervall der Datenbank (siehe oben)

Default-Werte:

  driverhost:          localhost

  driver-port:        8083

  database:            eibdb.xml

  applications-port:     8081

  http-port:           8080

  synctimeout:         300  (in sec)

 

5.5.2Klassen und deren Assoziationen

Das Klassendiagramm in Abbildung 9 zeigt die Klassen des Moduls homeserver und die Beziehungen der einzelnen Klassen zueinander.


Abbildung 9 Klassendiagramm des homeserver.

 


5.5.3Klassen, Attribute und Methoden

5.5.3.1HomeServer

Die Methoden der Klasse HomeServer sind in Abbildung 10dargestellt.


Abbildung 10 Die Klasse HomeServer

 


5.5.3.2DatenBank

Die Methoden der Klasse DatenBank sind in Abbildung 12 dargestellt.

 

Abbildung 12 Die Klasse DatenBank.

5.5.3.3Driver

Die Methoden der Klasse Driver sind in Abbildung 13 dargestellt.

Abbildung 13 Die Klasse Driver.

5.5.3.4DriverMessages

Die Methoden der Klasse DriverMessages sind in Abbildung 14 dargestellt.

Abbildung 14 Die Klasse DriverMessages.

5.5.3.5Client

Die Methoden der Klasse Client sind in Abbildung 15 dargestellt.

Abbildung 15 Die Klasse Client.

5.5.3.6ClientMessages

Die Methoden der Klasse ClientMessages sind in Abbildung 16 dargestellt.

 

Abbildung 16 Die Klasse ClientMessages

5.5.3.7Interest

Die Methoden der Klasse Interest sind in Abbildung 17 dargestellt.

Abbildung 17 Die Klasse Interest.

5.5.3.8PathData

Die Methoden der Klasse PathData sind in Abbildung 18 dargestellt.

Abbildung 18 Die Klasse PathData.

5.5.3.9Instruction

Die Methoden der Klasse Instruction sind in Abbildung 19 dargestellt.

Abbildung 19 Die Klasse Instruction.


6Literaturverzeichnis

[1]BMBF-Leitprojekt „Eletronische Multimediale Bedienassistenz“ (Embassi) www.embassi.de

[2]Intel: The Universal Plug and Play (UPnP) SDK for Linux, http://sourceforge.net/projects/upnp/

[3]EIB Association: www.eiba.org