EIBserver

Der EIBserver ist ein Software-Modul für Win32 (also Windows 2000 und XP) und kann über eine serielle Schnittstelle mit dem EIB kommunizieren. Das Modul stellt eine Socket-Schnittstelle zur Verfügung (entweder lokal - also 127.0.0.1 - oder im Haus-internen Netzwerk) um dann mit anderen Applikationen EIB-Daten austauschen zu können.

Als Schnittstelle zur eigenen Visualisierung dient dann zB das EIB2net-OCX, dies kann einfach in VC++, Visual-Basic oder Delphi eingebunden werden. Natürlich kann die Socket-Schnittstelle des EIBserver auch von einem Linux-Rechner benutzt werden. Oder umgekehrt: auch der LEIBnix stellt eine Socket/Proxy-Schnittstelle zur Verfügung, die dann von einer Visualisierung verwendet werden kann...

 Architektur

Die folgende Grafik zeigt die Architektur (bitte anklicken zum Vergrößern).

 Beispiele

Einem holländischen Kollegen verdanken wir, dass man den EIBserver+OCX auch unter Excel nutzen kann - für alle die keine Programmierumgebung nutzen wollen oder können. Lediglich ein bisschen VB-Code wird als Makro hinterlegt, wie's geht steht in der Excel-Tabelle drin.

[Download] EIB-Excel-Tester (ZIP)

 RS232 und USB

Leider haben immer weniger PCs eine "richtige" serielle RS232 Schnittstelle - und mancher versucht dann einen USB-nach-seriell Adapter einzusetzen: das kann funktionieren - oder auch nicht !

Es gibt nach den bisherigen Erfahrungen keinen USB-nach-seriell Wandler der das FT1.2 Timing korrekt und zuverlässig realisiert. Im Wesentlichen geht es darum, dass ein EMI-Frame, egal ob es vom Bus kommt oder vom Host, innerhalb 26 ms durch ein ACK bestätigt werden muss. Es macht keinen Unterschied, ob man USB1 oder USB2 verwendet, das Problem liegt einfach in der Adaption der Protokolle.

Die käuflichen EIB-USB Schnittstellen sind gänzlich anders aufgebaut: hier baut der Hersteller eigentlich immer einen proprietären Mikrocontroller ein, der sowohl das EIB-Protokoll abwickelt als auch eine USB-Schnittstelle hat. Das ist mit vertretbarem Aufwand kaum nachzubauen, zumal man dann auch noch einen passenden Win32 USB Treiber schreiben müsste, der dann am besten auch noch zur ETS3 passt...

Es gibt einige Adapter auf Basis des CP2102 (siehe chip45.com), die funktionieren häufig. Die Adapter der Firma "Prolific" funktionieren auch manchmal - aber es gibt da keine verlässlichen Informationen, weil selbst zwei baugleiche Adapter schon unterschiedliches Verhalten gezeigt haben.

 Referenzliste

Es gibt eine Unzahl an Varianten, um den EIBserver an den EIB zu koppeln - daher kommt hier nun eine Liste mit funktionierenden Lösungen:

BCU-Hardware
 
Schnittstelle
 
Anmerkungen
 
Siemens Busankoppler 5WG1-114-2AB02 erfordert einen EIBmax oder ähnlichen RS232 Pegelwandler an der PEI-Schnittstelle, PEI-Typ 10 per Widerstand RTYPE (47 kOhm) einstellen. Für das FT1.2 Protokoll werden nur drei Leitungen RxD,TxD,GND benötigt. bei galv. Kopplung müssen schnelle Optokoppler verwendet werden
BIM-113-2.1 erfordert einen RS232 Pegelwandler, PEI-Typ 10 per Widerstand RTYPE (47 kOhm) einstellen. Für das FT1.2 Protokoll werden nur drei Leitungen RxD,TxD,GND benötigt. bei galv. Kopplung müssen schnelle Optokoppler verwendet werden
Gira Busankoppler UP 2.1, Nr 0645 00 Gira Datenschnittstelle FT 1.2, Nr 0504 .. damit Daten vom Bus empfangen werden: GIRA Tasterschnittstelle 2 Applikation aus der ETS3 programmieren. Kabel zum PC hat 1:1 Belegung.
Busch-Jäger 6133 wurde modifiziert: Umschalter zwischen PEI-10 (=FT12) und PEI-16 (=ETS2) siehe EIB ProSys-Forum
Merten BU-UP2.0
620299
Seriell 681260 $0020 Telegramme Senden, ok, ohne progr. Applikation kein Empfangen, mit Applikation nur 33 verschiedene Gruppenadressen

Für die folgenden Informationen vielen Dank an Andre

Merten BU-RTR
623299
Seriell 681260 funktioniert ok
Merten UP
4 x Binäreingang
639898
Seriell 681260 funktioniert ok
Merten BU-RTR
623299
Serieller Eigenbau funktioniert, aber 4-fach Telegrammempfang
Merten UP
4 x Binäreingang
639898
Serieller Eigenbau funktioniert, aber 4-fach Telegrammempfang

WICHTIG: nachdem ich das schon sooo oft erklären musste: der EIBserver funktioniert nur in Verbindung mit einem Busankoppler oder einer BIM die auf PEI-10 eingestellt sind und damit FT 1.2 Protokoll. Evt. könnt ihr den PEI-Typ mit der ETS herausfinden (dazu benötigt ihr natürlich einen zweiten Buszugang) indem man die Geräte-Info der Schnittstelle ausliest (dazu muß diese natürlich eine phys. Adresse haben).

Es besteht aktuell der Verdacht, dass einige Schnittstellen ihren Modus durch DTR Leitung ändern.

Wenn das bisher nur spanische Dörfer waren: wenn ich mal ganz viel Zeit habe werde ich vielleicht auch ein komplettes EIB-Kompendium schreiben....

 Software

[Download] EIBserver (ZIP v02.12)
[Download] EIBserver (ZIP v02.11)

[Download] EIBserverTest (ZIP)

Die folgende ZIP-Archive enthalten das OCX als Binary mit Source-Code, sowie eine Dokumentation der Schnittstelle.

[Download] EIB2netOCX (ZIP v7.2)
[Download] EIB2netOCX (ZIP v6.2)
[Download] Visual-Basic Beispiel (ZIP)

 Errata

OCX Version 7.2
Bugfix für eine fehlerhafte Bitmaske bei den Datum- und Uhrzeitfunktionen

Version 2.12
Der komplette Messaging-Mechanismus wurde an den LEIBnix angepasst, aktuell sind mir keine Fehler bekannt.

Version 2.11 (beta)
Dank der Mithilfe von Jörg Sinemus konnten wir einen Fehler im EIBserver beheben, der nach einiger Zeit zur einer 100% Auslastung der CPU geführt hatte. Falls der EIBserver eine EIB-Nachricht nicht dekodieren kann, wird (testhalber) eine Log-Datei (c:\eibserver.log) erzeugt - falls jemand eine solche Datei bei sich beobachtet bitte ich um Information.

Version 2.09
Der EIBserver erfordert (derzeit) eine BCU 2.1 - warum es mit einer 2.0 Version nicht läuft ist noch nicht ganz raus. Die aktuelle 2.09 hat eine Anzeige für Ack-Fehler: wenn der EIBserver eine gültige FT1.2 Nachricht empfängt, dann muß er diese sofort mit einem ACK (0xE5) quittieren, wenn er dies nicht innerhalb 25ms schafft, dann wiederholt die BCU bis zu 4 mal diese Nachricht. Warum der EIBserver das manchmal nicht schafft, ist noch unklar, aber das wird nun erkannt und angezeigt, und die doppelten Nachrichten werden auch nicht mehr über den Socket weitergeleitet.

 EIB2net

Was ist EIB2net ?
Mit EIB2net bezeichne ich meine Netzwerk-Lösung zum Zugriff auf den EIB. Das System besteht aus einem EIBserver der über eine serielle Schnittstelle und dem FT1.2 Protokoll mit einem Busknoten (BIM113 oder BCU2) kommuniziert und diese Nachrichten über ein Netzwerk verfügbar macht. Über eine Socket-Schnittstelle können sich dann weitere EIB2net-Clients mit dem Server verbinden und Daten austauschen. Derzeit gibts ein OCX, das man dann in VC++, VB, Delphi oder sonstwas einbinden kann.

(Das Ganze hiess bisher 'EIBnet' - aber nachdem die EIBA den Begriff nun auch verwendet, möchte ich hier Verwechslungen vorbeugen).

Benötigt man dazu einen PC ?
Es stellt sich die Frage, ob man wirklich einen PC haben will, der die ganze Zeit brummt und heizt, nur weil man die Rolläden steuern will oder manchmal eine Visualisierung braucht. Andererseits entwickelt man auf einem PC recht komfortabel und daher habe ich mich entschieden nicht einen Low-Level-Treiber zu schreiben. EIBserver ist zwar heute eine Windows-Anwendung, aber die Portierung auf mein Embedded-Linux-System funktionert prima.

Warum ein OCX ?
Ich wollte den EIB-Code von der Oberfläche trennen und habe nach eine geeigneten Lösung gesucht. Die EEmsg-Klasse (Extended EIB) im OCX kann als Source problemlos auf andere Plattformen portiert werden und ist nur in das OCX "eingehüllt". Im Gegensatz zu einer DLL hat man bei einem OCX einige Vorteile - natürlich hat das OCX auch Nachteile, aber das OCX soll auch nur einen bestimmten Bereich abdecken:

Wie funktionert das ?
Der EIBserver öffnet die serielle Schnittstelle und initialisiert den EIB-Knoten. Es muss sich um eine BIM113 oder BCU2 handeln, weil nur diese das FT1.2 Protokoll können bei dem man mit einer seriellen 3-Draht Leitung auskommt.

Der EIBserver stellt ein, dass er alle Nachrichten vom EIB empfängt und wartet dann am seinem Socket auf Clients. Das FT1.2 Protokoll wickelt der EIB-Server intern ab - über die Sockets werden nur noch EIB-Nachrichten versendet.

Das OCX besteht aus einem Client der sich mit dem EIBserver verbindet und die EIB-Nachrichten intern kapselt. Wer das OCX als Active-X einbindet muß sich nicht mal mehr um die EIB-Daten kümmern, das geschieht intern. Man kann aber wohl die CEEmsg-Klasse herausnehmen und in eigene Projekte einbinden, um dann viel mehr tun zu können.

IP-Adressen
Der EIBserver benötigt keine IP-Adresse, er benutzt die Adresse des Host-Systems auf dem er läuft. Dem OCX - also dem Client - muß man mitteilen wo der EIBserver läuft. Wenn dies derselbe Rechner ist nimmt man 127.0.0.1 (also 'Localhost').