Bauanleitung USB_Duo Sniffer - openv/openv GitHub Wiki
Mit dieser Bauanleitung sollen folgende Eigenschaften eines Adapters realisiert werden, die bisherige Veröffentlichungen in dieser Kombination nicht erfüllen:
- Die optische Schnittstelle soll mechanisch so aufgebaut sein, dass auch bei älteren Heizungsgeräten (~Baujahr 2008) die Abdeckung während des Betriebs geschlossen werden kann. Trotzdem müssen die Betriebs- und die Störungs-LED der Heizung erkennbar bleiben.
- Verwendungsmöglichkeit des Adapters auch bei den neueren Heizungsgeräten mit Schiebeabdeckung.
- Mechanische und elektrische Kompatibilität mit den aktuellen Optolink-Adaptern des Herstellers Viessmann.
- Mitlesen des Datenverkehrs der Heizung bzw. deren Steuerung (Vitotronic) durch möglichen Snifferbetrieb. Das heißt, Sende- und/oder Empfangs-Datenströme zwischen Steuergerät und der Heizung können auf der seriellen Ebene in Echtzeit mitgelesen werden - ohne den Datenverkehr zu beeinflussen.
- Mit wechselseitigen Schreib-/Lesetests originale Viessmann-Hardware (z.B. Vitoconnect 100) testen, um Existenz/Korrektheit von Adressen oder Neuerungen im Datenaustausch-Protokoll zu erkennen. Tatsächlich verwendet Viessmann jetzt Telegramm-Bytes, die in der Protokollbeschreibung 300 so nicht erwähnt werden. Einzelheiten siehe hier unter "Hinweise zum Betrieb".
Blockschaltbild Optolink-Adapter "USB-Duo/Sniffer" |
---|
Stromlaufplan Optolink-Adapter "USB-Duo/Sniffer" |
---|
|
Die Stromversorgung der Gesamtschaltung erfolgt über die 5V-USB-Busspannung einer oder beider CJMCU-Module. Durch deren internen Spannungsregler erzeugt, stehen am Ausgang 3,3V *) bereit, welche die Interface-Bauelemente versorgt.
Da die CJMCU-Module den Chip CP2102 von Silicon Labs zur USB-seriell-Umsetzung verwenden, entsprechen sie auch elektrisch den originalen Optolink-Adaptern.
Die Schottky-Dioden D3 und D4 entkoppeln die 3V3-Ausgänge voneinander. Damit bei Betrieb nur eines Moduls CJMCU keine Rückspeisung über die Datenports eines eventuell unbenutzten Moduls erfolgt, sind die Ausgänge TXO über T2 bzw. T3 entkoppelt. Die Ausgänge TXO liefern genügend Strom, um die Infrarot-Emitter-Diode (IRED) ausreichend anzusteuern. Bei den Eingängen RXI geschieht die Entkopplung mit den Dioden D1 und D2.
*) Tatsächlich liefern manche der CJMCU-Module wegen einer fehlerhaften Beschaltung des CP2102 anstelle der 3,3 V etwa 4,35 V am Ausgang "3V3" (Details s. Dokumentation der Module). Für den vorliegenden Anwendungsfall ist das unproblematisch.
Der USB-Duo-Adapter verwendet zur Wandlung USB nach Seriell und zurück Module mit dem länglichen Namen "CJMCU CP2102 MICRO USB to UART TTL Module 6 Pin serial Converter". Diese enthalten auf der USB-Seite eine USB-Buchse Mikro-B, so dass übliche Handy-Ladekabel zum Anschluss an Geräte mit USB-A-Buchse verwendet werden können. Auf der seriellen Seite sind sechs Lötaugen im 2,54-mm-Abstand zum Anschluss der Peripherie vorgesehen. Details zu diesen Modulen siehe Dokumentation.
Erhältlich sind diese Module auf diversen Handelsplattformen (Suche). Es empfiehlt sich der Kauf eines Satzes Module, z.B. fünf Stück für 13€ incl. Versand aus innerhalb der EU (Januar 2019).
Auf der Adapter-Platine sind zwei solcher Module und die Interface-Elektronik zur Steuerung von Opto-Sender und -Empfänger angeordnet. Fototransistor und IR-Sendediode befinden sich auf einer Extra-Leiterplatte (der "Opto-Platine", siehe Fotos unten), die über eine dreiadrige Leitung angeschlossen ist und in Form bzw. Abmessungen dem Original-Adapter der Fa. Viessmann entspricht.
Die Länge des Kabels ist nicht kritisch. Es kann je nach konkreter Heizungsanlage zwischen 10 cm und 30 cm gewählt werden. Um bei Heizungsgeräten mit Schiebeabdeckung eine einfache Montage des Optolink-Duo/Sniffer zu ermöglichen, ist in der aktuell beschriebenen Version ein Steckverbinder zwischen Adapter- und Opto-Platine vorgesehen. Verwendet man dabei den vorgeschlagenen Typ, ist das 25 cm lange Kabel an der Buchse bereits angecrimpt. Ansonsten empfiehlt sich, Flachbandleitung zu verwenden, die aus Litzen (keine Einzeldrähte) bestehen. Manche Flachbandleitungen aus alten PCs sind so aufgebaut und lassen sich leicht in drei Adern trennen. An der Seite der Opto-Platine drückt man die Einzeladern nach dem Verlöten in die Kammstruktur der Leiterplatte und fixiert das ganze mit etwas Heißkleber.
Im Archiv unten ist eine Variante des Optolink-Duo/Sniffers abrufbar, die zwischen Adapter- und Optolink-Platine ein fest verbundenes Kabel benutzt und damit ohne diesbezüglichen Steckverbinder auskommt.
Infrarot-LED VSMY2850RG und Phototransistor VEMT2000X01 (Links führen zu den Datenblättern, Alternativen siehe Stromlaufplan) sind Typen der Fa. Vishay mit passendem Emissions- bzw. Empfangsverhalten (Peak bei 850 nm bzw. 860 nm). Sie besitzen beide ein quadratisches Reverse-Gullwing-Gehäuse mit 2,2 mm Kantenlänge. Sie bedecken damit nur etwa ein Drittel der runden Optolink-Öffnungen an der Heizung, weswegen der Zustand von Betriebs- und Störungs-LED dahinter auch bei montierter Opto-Platine erkennbar bleibt. Die kugelförmigen Oberseiten der Bauelemente ragen nicht ganz durch die Leiterplatte hindurch, so dass die Platine glatt an der Heizung anliegen kann. Dazu sind die Gullwing-Anschlüsse passend zu formen. Allerdings beträgt die Gehäusehöhe der Bauelemente insgesamt etwas mehr als der lichte Abstand zwischen Heizung und Klappabdeckung. Trotzdem lässt sich die Abdeckung unter Ausnutzung deren beweglicher Befestigung vollständig schließen. Bei den Heizungsgeräten mit Schiebeabdeckung ist das ohnehin kein Problem. Dort verschwindet die Platine komplett dahinter.
Zur Positionierung der Opto-Platine vor dem "Viessmann-V" dienen in bewährter Weise Kupferdrähte mit 1,4 mm Durchmesser (aus gewöhnlicher 1,5 mm² Installationsleitung), die zu einem rechteckigen "U" gebogen wurden. Sie dürfen nicht mehr als 8 mm Eintauchtiefe in das "Viessmann-V" haben und werden schließlich auf der Leiterzugseite (der Heizung abgewandten Seite im Einbauzustand) der Opto-Platine verlötet.
Bestückte Platinen (Version mit Steckverbinder) |
Optoplatine mit Kabel |
Opto-Platine, bestückt (Version ohne Steckverbinder) |
Original-Viessmann-Adapter, geöffnet, z. Vergleich |
Ein Gehäuse für die Baugruppen ist nicht vorgesehen. Im Dauerbetrieb befindet sich die Opto-Platine ohnehin hinter der Heizungs-Abdeckung. Die Adapter-Platine hängt einfach an der Verbindungsleitung. Wer keinen Wert auf Sichtbarkeit der Sende-/Empfangs- und Betriebs-LEDs der CJMCU-Module legt, kann den Adapter an der Heizungsunterseite an den dort befindlichen Rippen befestigen.
Datei-Link | Beschreibung |
---|---|
Unterlagen einer Version des Adapters mit fester Leitung zwischen den Platinen (ohne Steckverbinder) |
Zur Herstellung der Platinen im Fotolithografie-Verfahren empfiehlt sich mit einem Laserdrucker jeweils eine Belichtungsfolie gespiegelt und ungespiegelt zu drucken. Die Dateien "..mit Bohrhilfe.." stellen die Bohrlöcher nicht in Originalgröße, sondern einheitlich mit 0,5 mm Durchmesser dar. Sie sind zur besseren Bohrerführung beim manuellen Bohren gedacht - wahlweise diese verwenden. Anschließend werden die beide Folien mit der Tonerschichtseite exakt zusammengeklebt. Dadurch erhöht sich die UV-Lichtdichtheit der Leiterzüge und man sieht gleichzeitig, wie genau der Laserdrucker arbeitet. Belichtung von fotolackbeschichtetem Basismaterial, Entwicklung mit 1%-iger Natriumhydroxid-Lösung und Ätzen mit Eisen(III)-chlorid-Lösung wie üblich. Die Hinweise zur Platinenherstellung in der Elektronik-FAQ sind zwar alt, aber immer noch hilfreich.
Wer Leiterplatten lieber mit dem Toner-Direkt-Transfer-Verfahren herstellt, muss darauf achten, die jeweils passenden Belichtungsdateien zu verwenden. Diese Technik ist ebenfalls in der Elektronik-FAQ beschrieben. Zusätzlich gibt es eine Reihe weiterführende Verweise.
Prinzipiell kann im Adapter „USB-Duo“ das Modul1 allein, Modul2 allein oder beide Module zugleich benutzt werden. Benutzen heißt Anschluss der USB-Seite an ein Steuergerät. Sind beide Module in Betrieb, ist die Steuerung der Heizung durch Modul2 vorgesehen. Modul1 ist in diesem Fall das "Sniffer"-Modul und sendet selbst keine Daten an die Heizung bzw. nur dann, wenn kein Konflikt mit den Sendedaten des Modul2 zu erwarten ist. Kann nicht ausgeschlossen werden, dass Modul1 den Datenverkehr durch unerwünschte Sendungen stört, so entfernt man einfach den Jumper auf XS2.
Es ist sowohl Modul1, als auch Modul2 verwendbar. Wie oben beschrieben, besteht elektrische und mechanische Kompatibilität zu den Viessmann-Original-Adaptern. Verwendet man Modul1, muss Pin 1 und 2 von XS1 verbunden sein (Pin 3 bleibt frei) und der Jumper auf XS2 ist gesteckt. Ist Modul2 das benutzte, spielt die Belegung von XS1 und XS2 keine Rolle.
Modul2 steuert in allen Fällen ungestört vom Betrieb des anderen Moduls die Heizung. Es sendet die vom Steuergerät an seinem USB-Anschluss übergebenen Daten an die Heizung und bekommt die Antwort der Heizung zurückgeliefert, die es wieder über USB dem Steuergerät zurückgibt. Welche Daten dem "Sniffer"-Modul1 an seiner seriellen Seite zur Auswertung übergeben werden, wird mit der Position des 3-poligen Jumpers auf XS1 bestimmt. Dabei sind drei verschiedene Varianten einstellbar.
XS1 Pin 1 und 2 verbunden, Pin 3 bleibt frei (Variante a im Stromlaufplan/Blockschaltbild)
Modul1 bekommt die von der Heizung zurückgelieferten Daten zur Analyse.
XS1 Pin 2 und 3 verbunden, Pin 1 bleibt frei (Variante b im Stromlaufplan/Blockschaltbild)
Modul1 bekommt die von Modul2 an die Heizung gesendeten Daten zur Analyse.
XS1 Pin 1, 2 und 3 verbunden (Variante c im Stromlaufplan/Blockschaltbild)
Modul1 bekommt sowohl die an die Heizung gesendeten Daten, als auch die von der Heizung zurückgelieferten Daten zur Analyse. Das ist deswegen möglich, weil beide Datenströme nie zur gleichen Zeit auftreten.
Den Einsatz des Optolink-Adapters USB-Duo/Sniffer im Betrieb zeigen die Bilder unten. Darin zu sehen ist jeweils links der Viessmann Vitoconnect 100 als Datensender und -empfänger zur Heizung (hier "Vitodens 300-W" WB3C, Code: CB). Der Vitoconnect ist dabei an das Modul2 des Adapters angeschlossen (auf dem Adapter von hier aus gesehen das rechte Modul). Rechts im Bild der Überwachungs-(Mini-)PC, der unter Windows 10 läuft und den bidirektionalen Datenstrom zwischen Vitoconnect und Heizung mitschneidet. Der PC ist an das Modul1 des Adapters angeschlossen und wird in Variante c betrieben.
Beide Steuergeräte sind in das häusliche WLAN eingebunden. Der Vitoconnect wird über die vorgesehenen Apps *), der Mini-PC über eine Remote-Desktopverbindung vom Arbeitszimmer aus bedient.
Betrieb des Adapters, Abdeckung geöffnet | Betrieb des Adapters, Abdeckung geschlossen Betriebs-LED der Heizung bleibt sichtbar |
*) Viessmann stellte bis Juni 2018 zwei Apps jeweils für Android und iOS zur Heizungsbedienung bereit. Für den Normal-Anwender "ViCare" und für den mehr technisch interessierten Kunden die "Vitotrol Plus". Letztere wurde zum großen Bedauern der Usergemeinde eingestellt und aus den Stores entfernt. Der Hersteller hat versprochen, den zzt. (Version 2.0.3) dürftigen Funktionsumfang der "ViCare" erheblich zu erweitern.
Bei oben beschriebener Betriebsweise erfolgt die Auswertung der Vitoconnect-Daten wie folgt:
Ein aktives Terminalprogramm HTerm, das auf dem Windows-PC läuft, loggt die Datenströme - sinnvollerweise in Form von Hexadezimalzahlen. Dabei kann HTerm wahlweise zusätzlich bei jedem empfangenen Byte (sofern sie nicht zu schnell aufeinanderfolgen) eine Zeitmarke in die Logdatei einfügen.
HTerm ist auf die Übertragungsparameter der Optolink-Schnittstelle einzustellen (Auswahl der seriellen Schnittstelle COMx, Datenrate 4800 bit/s, 8 Datenbit, 2 Stoppbits, Parität gerade) und die Connection zu aktivieren. HTerm schreibt daraufhin alle Daten so mit, wie sie dem Modul1 mit der oben beschriebenen Jumperauswahl zugeführt werden. Hier also die Sende- und Empfangsdaten, die das Modul2 mit der Heizung austauscht. Läuft diese Verbindung beispielsweise etwa eine Minute, so entsteht eine Logdatei im Textformat von ca. 15kByte Größe (etwa 10 mal mehr, falls Timestamp aktiv) und dem Namen "output_yyyy-MM-dd_hh-mm-ss.log".
Um die Logdatei in ein auswertbares Format zu bringen, verwendet man die unten zum Download bereitstehende Exceldatei. Sie enthält ein kleines VBA-Programm, das die unstrukturierten Daten in der HTerm-Logdatei in einzelne Datensätze separiert. Dabei schreibt es das Ergebnis sowohl in ein Excel-Tabellenblatt, als auch in eine Textdatei. Die Filter-, Sortier- und anderen Auswertungsmöglichkeiten von Excel sollen dazu dienen, den Datenverkehr mit der Heizung genauer zu analysieren.
Wer (verständlicherweise) eine aus dem Web stammende Exceldatei mit ausführbarem Code nicht unmittelbar starten will, sollte sie zuerst in ein Excel laden, dem das Ausführen von Makros untersagt wurde *). Danach kann man per Alt + F11
den Quelltext ansehen und sich davon überzeugen, dass der Code nichts anderes macht, als hier beschrieben.
Das Import-Programm wird als Makro mit der Tastenkombination Strg + i
aufgerufen. Per üblicher Dateidialoge wählt man zuerst die zu importierende Logdatei aus und bestimmt den Namen der Zieldatei (standardmäßig wird einfach der Text "_separiert" an den Quelldateinamen angehängt). Gleichzeitig wird ein neues Excel-Tabellenblatt erzeugt und formatiert. Während des Importvorgangs befüllt das Programm die Zieldatei und das neue Tabellenblatt mit den separierten Datensätzen.
Die automatisch eingefügten Überschriften bzw. Kommentare im Tabellenblatt sollen bei der Datenanalyse helfen. Hier ist zu beachten, dass es nur bis zur Spalte "n Bytes" eine feste Zuordnung der Überschrift mit den darunter stehenden Daten gibt. Da in einzelnen Datensätzen 0 bis zu (theoretisch) 255 Datenbytes vorkommen können, gilt die Spaltenüberschrift "ggf. Datenbytes" für keine bzw. bis zu 255 Spalten! Ähnlich bei der Überschrift "Prüfsumme". Diese gilt zwar stets für eine Spalte, aber immer für die letzte mit Daten befüllte!
*) Alternativ kann die Excel-Datei in Open-Office geöffnet werden. Bekanntlich sind dort Makros im Quelltext sichtbar. Ausführen kann Open-Office VBA-Code aber nicht.
Ursprünglich wurde davon ausgegangen, dass der Vitoconnect 100 nur dann Daten mit der Heizung austauscht, wenn es die Bedien-App veranlasst. Dann könnte man parallel zur Vitoconnect in deren Pausen über das zweite Modul auf dem Adapter auf die Heizung zugreifen. Die Praxis zeigt aber ständigen Datenverkehr der Vtoconnect mit etwa 2,5 kByte/Minute in Senderichtung zur Heizung und etwa 8 kByte/Minute in Gegenrichtung.
Die Protokollbeschreibung zeigt die Grundzüge des Informationsaustausches mit den Viessmann-Heizungsgeräten über die Optolink-Schnittstelle. Verglichen mit den Daten hier (die mit der Original-Hersteller-Hard- und Software gewonnen wurden), ergeben sich einige neue Erkenntnisse. Als Beispiel soll folgende Logdatei dienen, die im Tabellenblatt 'Ruhe' der Exceldatei enthalten ist.
Dateilink | Beschreibung |
---|---|
Excel-Datei mit VBA-Importprogramm incl. importierter Vitoconnect-Logdateien |
Auffällig sind in Bezug auf die oben genannte Protokollbeschreibung folgende Umstände:
-
Das Byte mit der Nutzdatenlänge (Excel-Spalte B im Blatt 'Ruhe') gibt die Anzahl der Bytes danach bis vor Prüfbyte an (nicht zwischen Startbyte 0x41 und dem Prüfbyte).
-
Das Byte vor der Adressangabe (Spalte D, ebenfalls im Blatt 'Ruhe') hat nicht nur den Wertevorrat
0x01 = ReadData, 0x02 = WriteData, 0x07 = Function Call
. Es kommen allein bei Lesevorgängen alle Werte0bxxx00001
mit x = 0 oder 1 vor. Welche Bedeutung die Bits D5 bis D7 haben, bleibt unklar. Wenn sich die Anfrage auf die gleiche Adresse bezieht, ist auch die Antwort der Heizung auf jeden Fall unabhängig von diesen Bitwerten immer die gleiche. Vielleicht haben die Bits gar keine Bedeutung, weil sie ohne Auswirkung sind und einfach im Vitoconnect-Programm nicht sauber auf Null gesetzt wurden (z.B. mit Pseudocode:Byte := Byte AND 0b00011111
). -
Schreibvorgänge werden auf andere Adressen durchgeführt, als die zugehörigen Leseaktionen.
Beispiel (siehe Tabellenblatt 'Import2' in obiger Excel-Datei):
Die Statusänderung des Heizkreises 1 (A1/M1) von "Nur-Warmwasserbereitung" auf "Heizbetrieb + WW-Bereitung" geschieht durch Senden des Datenbytes0x02
an die Adresse0x2323
(Sendevorgang Schreiben s. Zeile 94:410600422323010291
). Das Lesen des Status erfolgt aber über die Adresse0x2500
(Sendevorgang Lesen s. Zeile 174:4105004125001681
). Einen Lesevorgang auf die Adresse0x2323
gibt es nicht. -
Bislang wurden die Datenpunkte/Adressen so dokumentiert, dass eine Datenabfrage an die Heizung einen Wert (z.B. eine Temperatur, ein Status) zurückliefert, der allerdings auch mehrere Byte umfassen konnte.
Jetzt zeigen die Mitschnitte, dass bei vielen Adressen ganze Datensätze zurückgegeben werden, die eine Reihe von Werten beinhalten können. Letzteres eröffnet den Datenpunkt-Forschern ein umfangreiches neues Betätigungsfeld. Selbst die in der offiziellen Bediensoftware der Fa. Viessmann, "Vitosoft 300", enthaltenen XML-Dateien geben keinen vollständigen Aufschluss über unterstützte Heizungsgeräte, Adressen/Datenpunkte und deren Bedeutung.
Rückfragen zum Optolink-Duo-Adapter bitte über Forum/Issues.