+ Antworten
Seite 1 von 9 1 2 3 ... LetzteLetzte
Ergebnis 1 bis 10 von 84
  1. #1
    Registriert seit
    Jan 2012
    Ort
    Wien
    Beiträge
    77

    Standard eBus Connector

    Hallo zusammen!

    Ich habe für mich einen eBus Connector entwickelt und dachte, ich stelle den mal hier rein - vielleicht kann den ja auch wer anderer brauchen.

    Der eBus Connector funktioniert ähnlich zum eBus Adapter von Brownson (siehe hier), ist aber als externes Programm und nicht als IPS-Modul realisiert. Als IPS-Modul wäre zwar architektonisch schöner, ich habe nur leider kein Delphi und es hat als Nebeneffekt auch den Vorteil, dass das Programm so einerseits nicht für jede neue IPS-Version neu kompiliert werden muss und andererseits bei Bedarf auch unabhängig von IPS verwendet werden kann.

    Mit dem eBus Connector können eBus Nachrichten über einen (virtuellen) COM-Port gelesen und synchronisiert geschrieben werden. Der Datenaustausch zwischen IPS und dem eBus Connector erfolgt via UDP. Ich habe hardwareseitig den "eBus-Koppler Ethernet" von E-Service Online in Verwendung, welcher diesen virtuellen COM-Port zur Verfügung stellt und mit dem physischen eBus verbindet.

    Hier die Details zum eBus Connector:

    Funktionen

    Lesen

    • Der eBus Connector liest die Daten vom COM-Port und fügt sie selbstständig zu vollständigen Nachrichten (jeweils abgeschlossen mit "AA") zusammen.
    • Sobald eine komplette Nachricht empfangen wurde, sendet der eBus Connector diese als UDP-Paket (als Hex-String) and den eingestellten Empfänger (z.B. IPS) weiter, wo die Nachricht dann verarbeitet werden kann.
    • Leere Nachrichten bzw. Auto-SYN-Zeichen werden gefiltert und nicht weitergeleitet.
    • Die Nachrichten werden so weitergeleitet, wie sie empfangen wurden, d.h. kein CRC-Check, keine Dekodierung oder Interpretation der Inhalte usw. - das bleibt der "Applikationsschicht" (z.B. einem IPS-Skript) überlassen.
    • Nachrichten die kürzer sind, als die Minimallänge von 6 Bytes (und daher definitiv ungültig sind) werden ignoriert und nicht weitergeleitet.

    Schreiben

    • Der eBus Connector lauscht am eingestellten UDP-Port auf eingehende Pakete (bestehend aus jeweils einem Hex-String).
    • Sobald ein UDP-Paket (z.B. kommend von IPS) mit einer Nachricht empfangen wurde, wird diese in eine Warteschlange gestellt.
    • Sobald am eBus ein SYN-Zeichen empfangen wurde, wird die nächste wartende ausgehende Nachricht über den COM-Port auf den eBus geschrieben.
    • Dadurch ist ein synchronisiertes Schreiben möglich, das Kollisionen vermeidet.
    • Wie beim Lesen werden die Nachrichten 1:1 so auf den eBus geschrieben, wie sie an den eBus Connector gesendet wurden, d.h. auch hier keine CRC-Berechnung usw. (das muss ebenfalls schon vorher in der Applikationsschicht geschehen).
    • Der eBus Connector lauscht während des Schreibens auf den Bus auf die selbst gesendeten Bytes. Sollten die empfangen Bytes nicht mit den gesendeten Bytes übereinstimmen, wurde eine Kollision erkannt und das Senden wird abgebrochen. Dadurch werden weitere Kollisonen vermieden. In diesem Zusammenhang empfiehlt es sich, eigene Nachrichten mit der Absenderadresse FFh zu verschicken (niedrigste Priorität am Bus und daher minimierte Gefahr, die anderen Teilnehmer am Bus durch Kollisionen "zu stören").
    • Konnte eine Nachricht auf Grund einer Kollision nicht gesendet werden, wird sie bei der nächsten Gelegeneheit automatisch erneut verschickt. Dies stellt sicher, dass die an den eBus Connector übergegebenen Nachrichten auch tatsächlich erfolgreich versendet werden.
    • NEU: Da manche Leute anscheinend Probleme damit haben, kann die zuvor genannte "listen while sending" Funktion auch abgeschaltet werden (Nachrichten werden als Ganzes versendet, ohne auf Kollisionen zu achten). Dafür bei der Konsolen-Applikation einfach den entsprechenden Switch (-lws) weglassen bzw. das Registry-File für den Windows-Service entsprechend anpassen.
    • NEU: Zu Testzwecken kann die Zeit, die zum Versenden von einzelnen Nachrichten benötigt wird, in der Konsole angezeigt werden. Dafür bei der Konsolen-Applikation einfach den entsprechenden Switch (-sw) hinzufügen.

    Einsatzweise

    • Konsolen-Applikation: Der eBus Connector kann in der Konsole ausgeführt werden, wo auch alle empfangenen und gesendeten Daten mitprotokolliert und angezeigt werden. Die nötigen Parameter werden über die Kommandozeile übergeben.
    • Windows-Service: Der eBus Connector kann im Hintergrund als Windows Service ausgeführt werden. Meldungen werden ins Event-Log (Anwendungs-Log) geschrieben, jedoch nur Status- und Fehlermeldungen und nicht alle empfangenen und gesendeten Daten. Die nötigen Parameter sind in der Registry gespeichert.

    Konsolen-Applikation

    Der Aufruf der Konsolen-Applikation erfolgt folgendermaßen:

    Code:
    eBusConnectorConsole <SerialPort> <LocalUDPPort> <Host> <RemoteUDPPort> <-lws> <-sw>
    Die Parameter sind:

    • SerialPort: Der COM-Port über den mit dem eBus kommuniziert wird.
    • LocalUDPPort: Der UDP-Port an dem der eBus Connector nach zu sendenden eBus Nachrichten lauscht.
    • Host: Der Host bzw. die IP-Adresse an den der eBus Connector empfangene eBus Nachrichten weiterleitet.
    • RemoteUDPPort: Der zugehörige UDP-Port für das Weiterleiten von empfangenen eBus Nachrichten.
    • -lws: Aktiviert die "listen while sending" Funktion (optional).
    • -sw: Aktiviert die Stopwatch-Funktion (optional).

    Ein Aufruf könnte beispielsweise so aussehen:

    Code:
    eBusConnectorConsole COM10 8812 192.168.0.1 8813 -lws
    Die Applikation läuft dann so lange, bis der Benutzer RETURN drückt.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Konsole.png 
Hits:	1476 
Größe:	63.0 KB 
ID:	19693

    Windows Service

    Konfiguration

    Als Erstes muss die Datei eBusConnector.reg bearbeitet werden, um dort die Einstellungen (unten fett markiert) gemäß der eigenen Wünsche anzupassen.

    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\eBusConnector]
    
    ; The name of the serial port used to communicate with the eBus
    "SerialPort"="COM10"
    
    ; The local UDP port to listen on for commands
    "LocalUDPPort"="8812"
    
    ; The remote host to send the results to
    "RemoteHost"="192.168.0.1"
    
    ; The remote UDP port to send the results to
    "RemoteUDPPort"="8813"
    
    ; Enable (1) or disable (0) the listen while sending function
    "ListenWhileSending"=dword:1
    
    ; Uncomment to enable delayed autostart to allow the virtual serial port service to start first
    ; "DelayedAutoStart"=dword:1
    Installation

    Danach muss der eigentliche Dienst installiert werden. Dies kann mit dem mitgelieferten Batch-Skript gemacht werden:

    Code:
    "Install Service.bat"
    Die Installation muss mit Admin-Rechten ausgeführt werden!

    Das Skript macht nichts anderes, als den Dienst mittels InstallUtil.exe aus dem .NET-Framework zu installieren

    Code:
    C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe eBusConnectorService.exe
    danach die Einstellungen in die Registry zu schreiben

    Code:
    regedit /s eBusConnector.reg
    danach den Dienst vom Virtual Serial Port Service abhängig zu machen (diese Zeile entfernen bzw. anpassen, sollte kein bzw. ein anderslautender Dienst dafür verwendet werden)

    Code:
    sc config eBusConnector depend=sec_service
    und letztendlich den Dienst zu starten

    Code:
    net start eBusConnector
    Der Dienst ist dann standardmäßig auf verzögerten automatischen Start eingestellt.

    De-Installation

    Der Dienst kann bei Bedarf wieder per Batch-Skript deinstalliert werden:

    Code:
    "Uninstall Service.bat"
    Dieses Skript verwendet wiederum InstallUtil.exe zum Deinstallieren:

    Code:
    C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -U eBusConnectorService.exe
    IPS-Konfiguration

    Um den eBus Connector in IPS zu verwenden, müssen lediglich ein UDP Socket und eine zugehörige Register Variable angelegt und mit den entsprechenden Port-Nummern konfiguriert werden.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Instanzen.png 
Hits:	450 
Größe:	5.5 KB 
ID:	19772

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	UDP Socket.png 
Hits:	796 
Größe:	10.0 KB 
ID:	19692

    Die vom eBus gelesen Daten können dann im Ziel-Skript der Register Variable verarbeitet werden:

    Code:
    $eBusMessage = $_IPS['VALUE'];
    Um Daten auf den eBus zu schreiben, müssen sie einfach über den UDP Socket gesendet werden:

    Code:
    USCK_SendText(36211, "10 08 B5 12 02 00 00 CA");
    Anbei befinden sich sowohl das fertig kompilierte Tool, als auch dessen Source-Code (C# für .NET 2.0, geschrieben mit Visual Studio 2005).

    Falls wer dieses Tool gebrauchen kann, freue ich mich über Feedback!

    Viel Spaß damit und noch einen guten Rutsch!
    Angehängte Dateien Angehängte Dateien
    Geändert von terenyi (06.04.13 um 01:06 Uhr) Grund: Update auf neue Version 1.3

  2. #2
    Registriert seit
    Apr 2011
    Ort
    Cologne
    Beiträge
    801

    Hi terenyi,

    großartig - genau was ich gesucht habe! Hab's bereits angetestet, bis jetzt funkioniert alles wie gewünscht.

    Danke G gruß, Axel

  3. #3
    Registriert seit
    Apr 2011
    Ort
    Cologne
    Beiträge
    801

    Hi terenyi,

    ich bekomme jetzt lesend alls in IPS - und das ohne mein Log sekündlich zuzumüllen. Tolle Arbeit!

    Ich kann aber noch nicht senden - bekomme immer "☻ :ALID MESSAGE: ? ♥". Kannst du mal ein Beispiel für eine beliebige Message + CRC-Berechnung durchgeben?

    Danke & Gruß, Axel

  4. #4
    Registriert seit
    Jan 2012
    Ort
    Wien
    Beiträge
    77

    Hallo!

    Der eBus Connector macht keine CRC-Checks oder dergleichen, sondern prüft nur den via UDP empfangenen Hex-String (ASCII) auf formale Korrektheit. "INVALID MESSAGE" kommt dann, wenn die Anzahl der Zeichen (nachdem alle Leerzeichen rausgelöscht wurden) im String ungerade ist (da zwei Zeichen pro Byte erwartet werden, d.h. ggf. sind führende Nullen nötig, also z.B. "0A" und nicht nur "A") oder wenn ein anderes Zeichen als 0-9 oder A-F vorkommt.

    Ein funktionierender String ist z.B. wie im Beispiel oben:

    USCK_SendText(36211, "10 08 B5 12 02 00 00 CA");

    Wenn das immer noch nicht funktioniert, dann könnte es vielleicht ein Problem mit der Zeichenkodierung im String sein?

    Grüße!

  5. #5
    Registriert seit
    Apr 2011
    Ort
    Cologne
    Beiträge
    801

    Danke - so geht's. Stelle gerade alle meine Skripte um. Tolle Sache!

  6. #6
    Registriert seit
    Jan 2012
    Ort
    Wien
    Beiträge
    77

    Freut mich zu hören, dass es funktioniert!

  7. #7
    Registriert seit
    Apr 2011
    Ort
    Cologne
    Beiträge
    801

    Moin terenyi,

    dein Controller läuft bei mir seit ein Paar Tagen sorgenfrei.

    Jetzt habe ich Appetit auf mehr und folgende Feature Requests:

    - eBus Messages vor Weitergabe per UDP an IPS auf Korrecktheit prüfen (CRC)
    - Sendepuffer für B509 (wenn kein ACK mit 00 00 00, dann x-mal erneut senden)
    - CRC an zu Sendende Messages hängen

    Meinst du, das liesse sich realisieren?

    Danke & Gruß, Axel

  8. #8
    Registriert seit
    Jan 2012
    Ort
    Wien
    Beiträge
    77

    Hallo!

    All diese Dinge habe ich bereits implementiert, jedoch als IPS-Skripte. Ich bin fast fertig und werde meine Skripte demnächst posten. Hier aber schon mal ein Preview, wo du dann die gewünschten Funktionen findest, sobald ich alles hochgeladen habe:

    Zitat Zitat von axelp Beitrag anzeigen
    - eBus Messages vor Weitergabe per UDP an IPS auf Korrecktheit prüfen (CRC)
    eBusManager.php --> EBUS_NachrichtEinlesen($HexString)

    Macht die ganze Dekodierung (Nachricht in Teile zerlegen, CRC prüfen, A9 dekodieren usw.). Probier dann z.B. mal

    Code:
    print_r(EBUS_NachrichtEinlesen("10 08 B5 11 01 01 89 00 09 5E 50 00 80 FF 88 01 00 FF C1 00"));
    dann siehst du, wie es funktioniert.

    Zitat Zitat von axelp Beitrag anzeigen
    - Sendepuffer für B509 (wenn kein ACK mit 00 00 00, dann x-mal erneut senden)
    eBusSender.php --> EBUS_ReglerWertSetzen($Adresse, $Wert)

    Schaut nicht nur, ob der Befehl zum Setzen bestätigt wurde, sondern setzt den Wert, wartet kurz, liest ihn wieder aus und prüft, ob es zusammenpasst. Wenn nicht, wird es x Mal neu versucht.

    Zitat Zitat von axelp Beitrag anzeigen
    - CRC an zu Sendende Messages hängen
    eBusManager.php --> EBUS_NachrichtErstellen($QQ, $ZZ, $PB, $SB, $Daten)

    Erstellt die Nachricht anhand der gegebenen Parameter (zählt die Datenbytes, berechnet den CRC, kodiert A9 usw.). Mit

    Code:
    print EBUS_NachrichtErstellen("00", "15", "B5", "09", "0D 80 00");
    solltes du sehen, was es macht.

  9. #9
    Registriert seit
    Apr 2011
    Ort
    Cologne
    Beiträge
    801

    Bin gespannt!

  10. #10
    Registriert seit
    Jan 2012
    Ort
    Wien
    Beiträge
    77

    Zur Info:

    Ich habe jetzt eine neue Version 1.1 hochgeladen (im ersten Post). Zum Update einfach Service bzw. Konsolen-Tool stoppen, EXE-Dateien ersetzen und Service / Konsolen-Tool neu starten.

    In der alten Version hatte ich nach einem SYN zuerst die empfangene Nachricht weitergeleitet und dann erst die Sende-Warteschlange abgearbeitet, wodurch aber Zeit verloren geht, in der eventuell schon jemand anderer zu senden beginnt, wodurch es zu einer Kollision kommen kann.

    Ich habe das jetzt umgedreht, sodass zuerst gesendet wird. Ich habe die neue Version zwar erst kurz am Laufen, aber es scheint so, als ob die Fehlerrate ziemlich nach unten gegangen ist.

Ähnliche Themen

  1. eBus Adapter da
    Von wupperi im Forum Haustechnik
    Antworten: 45
    Letzter Beitrag: 01.05.17, 11:36
  2. Anbindung WOLF Therme mittels eBus-Adapter und eBus-Modul
    Von Brownson im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 27
    Letzter Beitrag: 20.05.16, 11:24
  3. eBus Adapter
    Von Brownson im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 87
    Letzter Beitrag: 26.01.16, 07:30
  4. Konfiguration der ebus connector software?
    Von klammeraffe im Forum Haustechnik
    Antworten: 2
    Letzter Beitrag: 26.09.12, 09:17
  5. USB to Ethernet Connector
    Von astrastar im Forum Schaufenster
    Antworten: 1
    Letzter Beitrag: 18.06.07, 19:22