http://old.ethersex.de/api.php?action=feedcontributions&user=Mali&feedformat=atomEthersex_Wiki - Benutzerbeiträge [de-at]2024-03-28T23:28:23ZBenutzerbeiträgeMediaWiki 1.30.0http://old.ethersex.de/index.php?title=YPort&diff=5434YPort2012-11-07T17:51:42Z<p>Mali: </p>
<hr />
<div>==Grundlagen==<br />
<br />
'''YPORT''' (aka XPORT) ist ein Ethernet-RS232-Konverter, den man per Default auf der Portnummer 7970 ansprechen kann.<br />
<br />
* Die Portnummer kann mit "menuconfig" auch geändert werden.<br />
* Die Baudrate kann man auch in "menuconfig" einstellen.<br />
<br />
Aufruf:<br />
nc ipnummer-ethersex 7970<br />
Damit bekommt dann ein RS232-Gerät an ein Terminal.<br />
<br />
Wenn es unerwünschte Echos gibt im Terminal, dann kann man die Verbindung so herstellen:<br />
stty -icanon -echo && nc ipnummer-ethersex 7970<br />
<br />
Wenn die Verbindung getrennt wird, muss man "blind" den Befehl "reset" eingeben und das Terminal ist wieder in normalem Modus.<br />
<br />
Alternativ kann man auch <br />
stty -icanon -echo; nc ipnummer 7970; stty icanon echo<br />
eingeben, dann sollte das Echo gleich wieder aktiviert sein und das Terminal in den zeilenorientierten Modus (cooked mode) schalten.<br />
<br />
<br />
<br />
<br />
<br />
<br />
== Virtuelle Schnittstelle auf YPort mappen==<br />
<br />
===Linux===<br />
socat PTY,link=/dev/YPort TCP:192.168.1.5:7970<br />
<br />
... sorgt dafür, dass die serielle Schnittstelle am Ethersex als /dev/YPort im Linux-System erscheint.<br />
<br />
===Windows===<br />
Unter Windows ist es möglich, einen COM-Port zu simulieren. Hierzu kann z.B. das kostenlose Programm [http://www.hw-group.com/products/hw_vsp/index_en.html HW Virtual Serial Port] verwendet werden. Dort einfach IP-Adresse und Port (Standard: 7970) eingeben, die Option "External NVT Commands Port" ausschalten und auf "Create COM" klicken.<br />
<br />
<br />
==Probleme==<br />
<br />
===Verschluckte Zeichen / unvollständige Übertragung===<br />
<br />
Wenn es zu Problemn mit der Übertragung kommt, könnte das an dem per default mit 32 Byte recht kleinen Buffer liegen. Die Buffergröße kann verändert werden wenn man per Menuconfig zunächst den 'expert mode' aktiviert, der weitere Optionen zum Vorschein bringt:<br />
<br />
* General Setup -> Prompt for all possible options (expert mode)<br />
<br />
Und danach kann man die Puffergröße einstellen:<br />
<br />
* Protocols -> YPort Support -> YPort Buffer Length<br />
<br />
Der YPort Puffer (YPORT_BUFFER_LEN) kann bis zu 511 Bytes groß konfiguriert werden.<br />
<br />
Weitere Informationen liefert das Debugging, wenn es zu Pufferüberläufen kommt sieht man dort sowas:<br />
<br />
telnet <ip> 2701<br />
yport stats<br />
rx fe=0, ov=0, pe=0, bf=59104<br />
<br />
fe=frame error -> Baudratenabweichung<br />
ov=rx overflow -> Datenverlust<br />
pe=parity error -> Übertragungsfehler<br />
bf=buffer full -> Datenverlust<br />
<br />
===Verdrahtung===<br />
<br />
Bei der Verbindung von zwei RS232-Geräten ist die Verkabelung manchmal ein Problem.<br />
<br />
Es gibt zwei Arten von RS232-Steckern: DTE und DCE ("Data Terminal Equipment" und "Data Communications Equipment")<br />
http://www.bb-elec.com/bb-elec/literature/tech/faq_rs232_connections_work.pdf<br />
Daumenregel: DTE ist der Computer, DCE ist ein Modem.<br />
<br />
Das Pollin [[AVR Net-IO]] ist zum Beispiel als DCE verkabelt (vgl. S.7. http://www.pollin.de/shop/downloads/D810058B.PDF : TxD an SUB-D9 Pin 2 und RxD an Pin 3).<br />
<br />
===ERROR: Connection blocked===<br />
<br />
Es kann jeweils nur eine TCP-Verbindung auf die serielle Schnittstelle weitergeleitet werden. Jede weitere Verbindung wird mit der Fehlermeldung "ERROR: Connection blocked" quittiert.<br />
<br />
Vorsicht: Programme, die einen Virtuellen Port zur Verfügung stellen und per TCP auf das Ethersex-System weiterleiten, halten möglicherweise die TCP-Verbindung aufrecht, obwohl zurzeit kein Programm den Virtuellen Port nutzt.<br />
<br />
<br />
[[Category:Ethersex]]</div>Malihttp://old.ethersex.de/index.php?title=YPort&diff=5433YPort2012-11-07T17:51:01Z<p>Mali: </p>
<hr />
<div>'''YPORT''' (aka XPORT) ist ein Ethernet-RS232-Konverter, den man per Default auf der Portnummer 7970 ansprechen kann.<br />
<br />
* Die Portnummer kann mit "menuconfig" auch geändert werden.<br />
* Die Baudrate kann man auch in "menuconfig" einstellen.<br />
<br />
Aufruf:<br />
nc ipnummer-ethersex 7970<br />
Damit bekommt dann ein RS232-Gerät an ein Terminal.<br />
<br />
Wenn es unerwünschte Echos gibt im Terminal, dann kann man die Verbindung so herstellen:<br />
stty -icanon -echo && nc ipnummer-ethersex 7970<br />
<br />
Wenn die Verbindung getrennt wird, muss man "blind" den Befehl "reset" eingeben und das Terminal ist wieder in normalem Modus.<br />
<br />
Alternativ kann man auch <br />
stty -icanon -echo; nc ipnummer 7970; stty icanon echo<br />
eingeben, dann sollte das Echo gleich wieder aktiviert sein und das Terminal in den zeilenorientierten Modus (cooked mode) schalten.<br />
<br />
<br />
<br />
<br />
<br />
<br />
== Virtuelle Schnittstelle auf YPort mappen==<br />
<br />
===Linux===<br />
socat PTY,link=/dev/YPort TCP:192.168.1.5:7970<br />
<br />
... sorgt dafür, dass die serielle Schnittstelle am Ethersex als /dev/YPort im Linux-System erscheint.<br />
<br />
===Windows===<br />
Unter Windows ist es möglich, einen COM-Port zu simulieren. Hierzu kann z.B. das kostenlose Programm [http://www.hw-group.com/products/hw_vsp/index_en.html HW Virtual Serial Port] verwendet werden. Dort einfach IP-Adresse und Port (Standard: 7970) eingeben, die Option "External NVT Commands Port" ausschalten und auf "Create COM" klicken.<br />
<br />
<br />
==Probleme==<br />
<br />
===Verschluckte Zeichen / unvollständige Übertragung===<br />
<br />
Wenn es zu Problemn mit der Übertragung kommt, könnte das an dem per default mit 32 Byte recht kleinen Buffer liegen. Die Buffergröße kann verändert werden wenn man per Menuconfig zunächst den 'expert mode' aktiviert, der weitere Optionen zum Vorschein bringt:<br />
<br />
* General Setup -> Prompt for all possible options (expert mode)<br />
<br />
Und danach kann man die Puffergröße einstellen:<br />
<br />
* Protocols -> YPort Support -> YPort Buffer Length<br />
<br />
Der YPort Puffer (YPORT_BUFFER_LEN) kann bis zu 511 Bytes groß konfiguriert werden.<br />
<br />
Weitere Informationen liefert das Debugging, wenn es zu Pufferüberläufen kommt sieht man dort sowas:<br />
<br />
telnet <ip> 2701<br />
yport stats<br />
rx fe=0, ov=0, pe=0, bf=59104<br />
<br />
fe=frame error -> Baudratenabweichung<br />
ov=rx overflow -> Datenverlust<br />
pe=parity error -> Übertragungsfehler<br />
bf=buffer full -> Datenverlust<br />
<br />
===Verdrahtung===<br />
<br />
Bei der Verbindung von zwei RS232-Geräten ist die Verkabelung manchmal ein Problem.<br />
<br />
Es gibt zwei Arten von RS232-Steckern: DTE und DCE ("Data Terminal Equipment" und "Data Communications Equipment")<br />
http://www.bb-elec.com/bb-elec/literature/tech/faq_rs232_connections_work.pdf<br />
Daumenregel: DTE ist der Computer, DCE ist ein Modem.<br />
<br />
Das Pollin [[AVR Net-IO]] ist zum Beispiel als DCE verkabelt (vgl. S.7. http://www.pollin.de/shop/downloads/D810058B.PDF : TxD an SUB-D9 Pin 2 und RxD an Pin 3).<br />
<br />
===ERROR: Connection blocked===<br />
<br />
Es kann jeweils nur eine TCP-Verbindung auf die serielle Schnittstelle weitergeleitet werden. Jede weitere Verbindung wird mit der Fehlermeldung "ERROR: Connection blocked" quittiert.<br />
<br />
Vorsicht: Programme, die einen Virtuellen Port zur Verfügung stellen und per TCP auf das Ethersex-System weiterleiten, halten möglicherweise die TCP-Verbindung aufrecht, obwohl zurzeit kein Programm den Virtuellen Port nutzt.<br />
<br />
<br />
[[Category:Ethersex]]</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=4743Vaillant X6 Schnittstelle2011-02-07T21:39:26Z<p>Mali: /* Belegung */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 10.01.11). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
'''Alle Informationen ohne Gewähr. Durch Kommunikation über die X6-Schnittstelle kann man die Konfiguration des Geräts ändern. Dadurch ist ein sicherer und gefahrloser Betrieb möglicherweise nicht mehr gegeben. Es kann zu Sach- und Personenschäden kommen. Die Verwendung aller Informationen erfolgt auf eigene Gefahr!'''<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick in die Buchse oder von hinten auf den Stecker, Rastnase nach rechts ...<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Sowas wie ein Nachrichtentyp:<br />
0x00 Normale Nachrichten <br />
0x01 Fehlermeldung Checksum-Fehler?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x03 Fehlermeldung?<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
0x80 Änderung von Parametern<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme<br />
<br />
===Prüfsumme===<br />
<br />
Zur Berechnung der Checksum werden die Bytes nacheinander XOR-verknüpft und das Zwischenergebnis dann jeweils um 1 bit nach links verschoben:<br />
<br />
sub checksum<br />
{<br />
my $string = $_[0];<br />
my $checksum; <br />
<br />
for (my $i = 0; $i < length($string); $i++)<br />
{<br />
if ($checksum & 0x80)<br />
{<br />
$checksum = ($checksum << 1 | 1) & 0xFF;<br />
# ???<br />
$checksum = $checksum ^ 0x18;<br />
}<br />
else<br />
{<br />
$checksum = $checksum << 1;<br />
}<br />
$checksum = $checksum ^ ord(substr($string, $i, 1));<br />
}<br />
return $checksum;<br />
}<br />
<br />
Den Quelltext darf gerne mal jemand in C konvertieren ;-) ...<br />
<br />
Beim Finden des Algorithmus waren kurze Nachrichten wie <tt>03 03 05</tt> und <tt>03 01 07</tt> nützlich. Es fiel dann aber auf, dass die Berechnung immer dann zu einem anderen Ergebnis führt, wenn das Zwischenergebnis im Verlauf der Berechnung größer als FFh (127) wird. In der Nachricht <tt>07 00 00 00 98 05 CC</tt> ist dies erst beim letzten Datenbyte der Fall. Von dort konnte man also zurückrechnen, was man am Zwischenergebnis ändern muss, um letztendlich auf die gleiche Prüfsumme zu kommen wie das Gerät. Diese Änderung ist genau ein XOR mit 18h. Siehe auch [http://coding.derkeiler.com/Archive/General/comp.arch.embedded/2008-06/msg00256.html] und [http://www.gamefaqs.com/console/nes/file/563408/47175].<br />
<br />
Ich sehe gerade, dass sich da schon jemand anderes mit beschäftigt hat. Er kommt im Prinzip zum gleichen Ergebnis: http://ab-log.ru/smart-house/heating-automation/vaillant-rs232 (russisch).<br />
<br />
===Befehle===<br />
<br />
Die bekannten Befehlsnachrichten sind 7 Byte lang und haben einen einheitlichen Aufbau. Dem 1 Byte langen Befehl werden zwei Null-Bytes vorangestellt, dann folgt ein Byte, das die Länge der erwarteten Daten angibt:<br />
<br />
00 00 98 05<br />
<br />
Der resultierende String wird nach dem oben geschilderten Aufbau von Nachrichten verpackt. Dabei ist das noch unbekannte Byte 2 ebenfalls "00h". Es ergibt sich:<br />
<br />
07 00 '''00 00 98 05''' CC<br />
<br />
Was das Byte angeht, das die Datenlänge angibt, bin ich noch nicht ganz sicher. Mein Gerät scheint es nicht allzu ernst zu nehmen. Verändert man das entsprechende Byte in der Anfrage, sendet weiterhin die ursprüngliche Anzahl von Bytes und somit eine andere Zahl von Bytes als angefordert:<br />
<br />
07 00 00 00 98 '''03''' CA<br />
08 00 '''02 2A FD D5 00''' 37<br />
<br />
====Liste der Befehle====<br />
<br />
{|class=wikitable<br />
!Befehl<br />
!Funktion<br />
!Datenbytes<br />
!Typ<br />
|-<br />
|01h<br />
|Sollwert Brauchwassertemperatur<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|02h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|03h<br />
|Unbekannter Statuswert<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|04h<br />
|Sollwert Speicher<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|05h<br />
|Flammsignal<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|06h<br />
|Fehlerspeicher?<br />
|28<br />
|Fehlerspeicher<br />
|-<br />
|07h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|08h<br />
|Sommer/Winter-Schalter<br />
|1<br />
|Status (Sommer/Winter)<br />
|-<br />
|09h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|0Ah<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|0Bh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|0Ch<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|0Dh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|0Eh<br />
|Status Raumthermostat<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|16h<br />
|Brauchwassersensor<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|17h<br />
|Speichertemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|18h<br />
|Vorlauftemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|19h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|1Fh<br />
|Anzahl GFA Störungen<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|20h<br />
|Anzahl STB Abschaltungen<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|21h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|22h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|23h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|24h<br />
|Drehzahlsollwert<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|25h<br />
|Sollwert Vorlauf Ext. Regler 7-8-9<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|26h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|28h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|29h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|2Eh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|32h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|38h<br />
|Verbleibende Brennersperrzeit<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|39h<br />
|Sollwert Vorlauftemperatur<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|3Ah<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|3Ch<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|3Dh<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|3Eh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|3Fh<br />
|Status externe Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|40h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|42h<br />
|Stellung VUV<br />
|1<br />
|Status (?)<br />
|-<br />
|43h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|44h<br />
|Status interne Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|45h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|46h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|47h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|48h<br />
|Status Gasmagnetventil<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|49h<br />
|Status Zünder<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|4Bh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|4Ch<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|4Dh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|4Eh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|4Fh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|50h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|51h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|53h<br />
|Status Unbekannt<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|54h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|55h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|57h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|58h<br />
|Anforderung Warmwasser C1/C2<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|5Bh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|5Ch<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|5Dh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|5Eh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|5Fh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|63h<br />
|Wasserpumpennachlaufzeit nach Speicherladung<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|64h<br />
|Wasserpumpennachlaufzeit nach Heizbetrieb<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|65h<br />
|Korrekturwert Aussentemperatur<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|66h<br />
|Speicherladezeit<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|68h<br />
|?<br />
|8<br />
|?<br />
|-<br />
|69h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Ah<br />
|Aussentemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|6Bh<br />
|Ext. Vor-/Rücklauftemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|6Ch<br />
|Heizungsteillast<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Dh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|6Eh<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Fh<br />
|Zähler 3 Zündversuche<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|70h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|71h<br />
|Status Speicherfreigabe Schaltuhr<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|72h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|73h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|74h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|75h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|76h<br />
|?<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|77h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|7Ah<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|7Bh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|7Ch<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|81h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|82h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|83h<br />
|Drehzahlistwert<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|89h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|8Eh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|8Fh<br />
|?<br />
|9<br />
|?<br />
|-<br />
|98h<br />
|Rücklauftemperatur<br />
|5<br />
|Zwei Analogwerte (2 x 2 byte) + ein Sensorstatus<br />
|-<br />
|99h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|9Ah<br />
|Unbekannter Temperaturwert<br />
|5<br />
|Zwei Analogwerte (2 x 2 byte) + ein Sensorstatus<br />
|-<br />
|9Bh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|9Dh<br />
|Offset Warmstartsollwert<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|9Eh<br />
|Status Speicherladepumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|9Fh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|A0h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A1h<br />
|Sollwert interne Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|A2h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|A3h<br />
|?<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|A4h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|A5h<br />
|Max. Vorlauftemperatur<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A6h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A7h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A8h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A9h<br />
|Unbekannter Wert<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|AAh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|ABh<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|ACh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|ADh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|AEh<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|AFh<br />
|Status Zirkulationspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B0h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B2h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B3h<br />
|Status Rücklaufregelung<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B4h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B6h<br />
|Speichertemperatur unten<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|B7h<br />
|Kollektortemperatur (nein!)<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|B8h<br />
|Kollektortemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|B9h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|C3h<br />
|Hyterese Solarpumpe<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|CAh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|D4h<br />
|?<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|D5h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|D6h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|}<br />
<br />
====Andere Befehle====<br />
<br />
Nicht alle Befehle passen in das genannte Schema.<br />
<br />
=====07 02 00 00 00 04 C4=====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
07 02 00 00 00 04 C4<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04". Weiterhin hat das unbekannte Byte 2 den Wert "02h".<br />
<br />
===Anworten des Geräts===<br />
<br />
Das Gerät anwortet mit Nachrichten, die den oben angegebenen Aufbau haben. Dabei das unbekannte Byte 2 anzugeben, ob es sich um eine "normale" Antwort ("00h") oder um eine andere Antwort handelt.<br />
<br />
====Normale Antworten====<br />
<br />
Bei normalen Antworten hat Byte 2 den Wert "00h". Ab Byte 3 folgenden dann die angeforderten Daten. Hierbei werden verschiedene Kodierungen verwendet. Analogwerte werden in einem oder zwei Bytes kodiert, je nach Befehl werden ein oder zwei derart kodierte Analogwerte zurückgegeben. Für Statusmeldungen scheint es verschiedene Kodierungen zu geben, die jeweils ein Byte verwenden.<br />
<br />
====Andere Antworten====<br />
<br />
{|class=wikitable<br />
!Nachricht<br />
!Bedeutung<br />
|-<br />
|<tt>03 '''00''' 06</tt><br />
|Bestätigung Parameteränderung<br />
|-<br />
|<tt>03 '''01''' 07</tt><br />
|Checksummenfehler?<br />
|-<br />
|<tt>03 '''03''' 05</tt><br />
|Nicht unterstützt, nicht vorhanden?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C. Negative Werte werden in Zweikomplement-Darstellung übertragen.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
FF21h = -223d => -223/16 °C = -13,94 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
F0 = Inaktiv<br />
0F = Aktiv<br />
<br />
oder<br />
<br />
00 = Inktiv<br />
01 = Aktiv<br />
<br />
<br />
<br />
<br />
<br />
==Links==<br />
<br />
* http://www.hx7.net/vaillant/ - liest Daten per EBUS mit vrDialog aus und stellt sie mit RRDTool grafisch dar<br />
<br />
* http://ab-log.ru/smart-house/heating-automation/vaillant-rs232 ([http://translate.google.de/translate?u=http%3A%2F%2Fab-log.ru%2Fsmart-house%2Fheating-automation%2Fvaillant-rs232&sl=ru&tl=de&hl=&ie=UTF-8 Google Übersetzung]) - liest Daten per X6 aus, beschreibt auch, wie man Parameter ändert.</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=4684Vaillant X6 Schnittstelle2011-01-10T11:25:01Z<p>Mali: </p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 10.01.11). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
'''Alle Informationen ohne Gewähr. Durch Kommunikation über die X6-Schnittstelle kann man die Konfiguration des Geräts ändern. Dadurch ist ein sicherer und gefahrloser Betrieb möglicherweise nicht mehr gegeben. Es kann zu Sach- und Personenschäden kommen. Die Verwendung aller Informationen erfolgt auf eigene Gefahr!'''<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Sowas wie ein Nachrichtentyp:<br />
0x00 Normale Nachrichten <br />
0x01 Fehlermeldung Checksum-Fehler?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x03 Fehlermeldung?<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
0x80 Änderung von Parametern<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme<br />
<br />
===Prüfsumme===<br />
<br />
Zur Berechnung der Checksum werden die Bytes nacheinander XOR-verknüpft und das Zwischenergebnis dann jeweils um 1 bit nach links verschoben:<br />
<br />
sub checksum<br />
{<br />
my $string = $_[0];<br />
my $checksum; <br />
<br />
for (my $i = 0; $i < length($string); $i++)<br />
{<br />
if ($checksum & 0x80)<br />
{<br />
$checksum = ($checksum << 1 | 1) & 0xFF;<br />
# ???<br />
$checksum = $checksum ^ 0x18;<br />
}<br />
else<br />
{<br />
$checksum = $checksum << 1;<br />
}<br />
$checksum = $checksum ^ ord(substr($string, $i, 1));<br />
}<br />
return $checksum;<br />
}<br />
<br />
Den Quelltext darf gerne mal jemand in C konvertieren ;-) ...<br />
<br />
Beim Finden des Algorithmus waren kurze Nachrichten wie <tt>03 03 05</tt> und <tt>03 01 07</tt> nützlich. Es fiel dann aber auf, dass die Berechnung immer dann zu einem anderen Ergebnis führt, wenn das Zwischenergebnis im Verlauf der Berechnung größer als FFh (127) wird. In der Nachricht <tt>07 00 00 00 98 05 CC</tt> ist dies erst beim letzten Datenbyte der Fall. Von dort konnte man also zurückrechnen, was man am Zwischenergebnis ändern muss, um letztendlich auf die gleiche Prüfsumme zu kommen wie das Gerät. Diese Änderung ist genau ein XOR mit 18h. Siehe auch [http://coding.derkeiler.com/Archive/General/comp.arch.embedded/2008-06/msg00256.html] und [http://www.gamefaqs.com/console/nes/file/563408/47175].<br />
<br />
Ich sehe gerade, dass sich da schon jemand anderes mit beschäftigt hat. Er kommt im Prinzip zum gleichen Ergebnis: http://ab-log.ru/smart-house/heating-automation/vaillant-rs232 (russisch).<br />
<br />
===Befehle===<br />
<br />
Die bekannten Befehlsnachrichten sind 7 Byte lang und haben einen einheitlichen Aufbau. Dem 1 Byte langen Befehl werden zwei Null-Bytes vorangestellt, dann folgt ein Byte, das die Länge der erwarteten Daten angibt:<br />
<br />
00 00 98 05<br />
<br />
Der resultierende String wird nach dem oben geschilderten Aufbau von Nachrichten verpackt. Dabei ist das noch unbekannte Byte 2 ebenfalls "00h". Es ergibt sich:<br />
<br />
07 00 '''00 00 98 05''' CC<br />
<br />
Was das Byte angeht, das die Datenlänge angibt, bin ich noch nicht ganz sicher. Mein Gerät scheint es nicht allzu ernst zu nehmen. Verändert man das entsprechende Byte in der Anfrage, sendet weiterhin die ursprüngliche Anzahl von Bytes und somit eine andere Zahl von Bytes als angefordert:<br />
<br />
07 00 00 00 98 '''03''' CA<br />
08 00 '''02 2A FD D5 00''' 37<br />
<br />
====Liste der Befehle====<br />
<br />
{|class=wikitable<br />
!Befehl<br />
!Funktion<br />
!Datenbytes<br />
!Typ<br />
|-<br />
|01h<br />
|Sollwert Brauchwassertemperatur<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|02h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|03h<br />
|Unbekannter Statuswert<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|04h<br />
|Sollwert Speicher<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|05h<br />
|Flammsignal<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|06h<br />
|Fehlerspeicher?<br />
|28<br />
|Fehlerspeicher<br />
|-<br />
|07h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|08h<br />
|Sommer/Winter-Schalter<br />
|1<br />
|Status (Sommer/Winter)<br />
|-<br />
|09h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|0Ah<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|0Bh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|0Ch<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|0Dh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|0Eh<br />
|Status Raumthermostat<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|16h<br />
|Brauchwassersensor<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|17h<br />
|Speichertemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|18h<br />
|Vorlauftemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|19h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|1Fh<br />
|Anzahl GFA Störungen<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|20h<br />
|Anzahl STB Abschaltungen<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|21h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|22h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|23h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|24h<br />
|Drehzahlsollwert<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|25h<br />
|Sollwert Vorlauf Ext. Regler 7-8-9<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|26h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|28h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|29h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|2Eh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|32h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|38h<br />
|Verbleibende Brennersperrzeit<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|39h<br />
|Sollwert Vorlauftemperatur<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|3Ah<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|3Ch<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|3Dh<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|3Eh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|3Fh<br />
|Status externe Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|40h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|42h<br />
|Stellung VUV<br />
|1<br />
|Status (?)<br />
|-<br />
|43h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|44h<br />
|Status interne Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|45h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|46h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|47h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|48h<br />
|Status Gasmagnetventil<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|49h<br />
|Status Zünder<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|4Bh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|4Ch<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|4Dh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|4Eh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|4Fh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|50h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|51h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|53h<br />
|Status Unbekannt<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|54h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|55h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|57h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|58h<br />
|Anforderung Warmwasser C1/C2<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|5Bh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|5Ch<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|5Dh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|5Eh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|5Fh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|63h<br />
|Wasserpumpennachlaufzeit nach Speicherladung<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|64h<br />
|Wasserpumpennachlaufzeit nach Heizbetrieb<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|65h<br />
|Korrekturwert Aussentemperatur<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|66h<br />
|Speicherladezeit<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|68h<br />
|?<br />
|8<br />
|?<br />
|-<br />
|69h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Ah<br />
|Aussentemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|6Bh<br />
|Ext. Vor-/Rücklauftemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|6Ch<br />
|Heizungsteillast<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Dh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|6Eh<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Fh<br />
|Zähler 3 Zündversuche<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|70h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|71h<br />
|Status Speicherfreigabe Schaltuhr<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|72h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|73h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|74h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|75h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|76h<br />
|?<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|77h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|7Ah<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|7Bh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|7Ch<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|81h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|82h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|83h<br />
|Drehzahlistwert<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|89h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|8Eh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|8Fh<br />
|?<br />
|9<br />
|?<br />
|-<br />
|98h<br />
|Rücklauftemperatur<br />
|5<br />
|Zwei Analogwerte (2 x 2 byte) + ein Sensorstatus<br />
|-<br />
|99h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|9Ah<br />
|Unbekannter Temperaturwert<br />
|5<br />
|Zwei Analogwerte (2 x 2 byte) + ein Sensorstatus<br />
|-<br />
|9Bh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|9Dh<br />
|Offset Warmstartsollwert<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|9Eh<br />
|Status Speicherladepumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|9Fh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|A0h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A1h<br />
|Sollwert interne Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|A2h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|A3h<br />
|?<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|A4h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|A5h<br />
|Max. Vorlauftemperatur<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A6h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A7h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A8h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A9h<br />
|Unbekannter Wert<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|AAh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|ABh<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|ACh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|ADh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|AEh<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|AFh<br />
|Status Zirkulationspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B0h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B2h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B3h<br />
|Status Rücklaufregelung<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B4h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B6h<br />
|Speichertemperatur unten<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|B7h<br />
|Kollektortemperatur (nein!)<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|B8h<br />
|Kollektortemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|B9h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|C3h<br />
|Hyterese Solarpumpe<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|CAh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|D4h<br />
|?<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|D5h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|D6h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|}<br />
<br />
====Andere Befehle====<br />
<br />
Nicht alle Befehle passen in das genannte Schema.<br />
<br />
=====07 02 00 00 00 04 C4=====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
07 02 00 00 00 04 C4<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04". Weiterhin hat das unbekannte Byte 2 den Wert "02h".<br />
<br />
===Anworten des Geräts===<br />
<br />
Das Gerät anwortet mit Nachrichten, die den oben angegebenen Aufbau haben. Dabei das unbekannte Byte 2 anzugeben, ob es sich um eine "normale" Antwort ("00h") oder um eine andere Antwort handelt.<br />
<br />
====Normale Antworten====<br />
<br />
Bei normalen Antworten hat Byte 2 den Wert "00h". Ab Byte 3 folgenden dann die angeforderten Daten. Hierbei werden verschiedene Kodierungen verwendet. Analogwerte werden in einem oder zwei Bytes kodiert, je nach Befehl werden ein oder zwei derart kodierte Analogwerte zurückgegeben. Für Statusmeldungen scheint es verschiedene Kodierungen zu geben, die jeweils ein Byte verwenden.<br />
<br />
====Andere Antworten====<br />
<br />
{|class=wikitable<br />
!Nachricht<br />
!Bedeutung<br />
|-<br />
|<tt>03 '''00''' 06</tt><br />
|Bestätigung Parameteränderung<br />
|-<br />
|<tt>03 '''01''' 07</tt><br />
|Checksummenfehler?<br />
|-<br />
|<tt>03 '''03''' 05</tt><br />
|Nicht unterstützt, nicht vorhanden?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C. Negative Werte werden in Zweikomplement-Darstellung übertragen.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
FF21h = -223d => -223/16 °C = -13,94 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
F0 = Inaktiv<br />
0F = Aktiv<br />
<br />
oder<br />
<br />
00 = Inktiv<br />
01 = Aktiv<br />
<br />
<br />
<br />
<br />
<br />
==Links==<br />
<br />
* http://www.hx7.net/vaillant/ - liest Daten per EBUS mit vrDialog aus und stellt sie mit RRDTool grafisch dar<br />
<br />
* http://ab-log.ru/smart-house/heating-automation/vaillant-rs232 ([http://translate.google.de/translate?u=http%3A%2F%2Fab-log.ru%2Fsmart-house%2Fheating-automation%2Fvaillant-rs232&sl=ru&tl=de&hl=&ie=UTF-8 Google Übersetzung]) - liest Daten per X6 aus, beschreibt auch, wie man Parameter ändert.</div>Malihttp://old.ethersex.de/index.php?title=Benutzer:Mali&diff=4286Benutzer:Mali2010-07-25T15:39:05Z<p>Mali: /* Ältere Geräte: RS232 */</p>
<hr />
<div>Hallo zusammen,<br />
<br />
was ATmega-Programmierung angeht, würde ich mich als Neuling bezeichnen. Vielleicht kann ich aber gerade deshalb ein bisschen zur Dokumentation des Ethersex-Projekts beitragen.<br />
<br />
<br />
==Projekte==<br />
<br />
Ich habe einige Ideen, wie ich Ethersex-Systeme einsetzen möchte.<br />
<br />
===Sender für HX2272 Funksteckdosen===<br />
<br />
Ich setze an verschiedenen Stellen Funksteckdosen ein, die ich gerne vom PC aus steuern möchte. In der Regel soll dies aus einem Perl-Script heraus geschehen. Die Realisierung erfolgte auf einem [[AVR Net-IO]] von Pollin und einem [[RFM12]]-Modul.<br />
<br />
===IR-Empfänger===<br />
<br />
Für zur Zeit zwei MythTV-Frontends suche ich nach einem flexiblen IR-Empfänger. Dabei möchte ich mich eigentlich nicht auf [[RC5]] festlegen, sondern die Dekodierung einem auf dem Frontend laufenden Lirc überlassen. Die Kommunikation könnte per Lirc-UDP-Protokoll erfolgen.<br />
<br />
===IR-Sender===<br />
<br />
Ganz ähnlich den erwähnten Funksteckdosen würde ich gerne Geräte, die sich über [[Infrarot-Fernbedienungen]] steuern lassen, vom Rechner aus steuern. Hierzu möchte ich einen flexiblen IR-Sender bauen, der neben dem [[RC5]]-Protokoll insbesondere auch das [[NEC-Protokoll]] unterstützen.<br />
<br />
===HDMI-CEC-Interface===<br />
<br />
Etwas wage sind meine Vorstellungen von einem HDMI-CEC-nach-LAN-Interface. Das HDMI-CEC-Protokoll (Consumer Electronics Control) erlaubt die Kommunikation zwischen HDMI-Geräten. Die Hersteller der HDMI-Geräte haben sich verschiedenste Marketing-Bezeichnungen für HDMI-CEC ausgedacht: Simplink (LG), Viera Link (Panasonic), Anynet+ (Samsung), Bravia Theatre Sync (Sony), Regza Link (Toshiba). Es handelt sich um einen 1-Wire-Bus auf einem separaten Pin des HDMI-Steckers, man kommt also nicht mit dem HDMI-Datenstrom in Kontakt.<br />
<br />
Ein paar Infos finden sich unter http://www.rainshadowtech.com sowie in der [http://www.hdmi.org/manufacturer/specification.aspx HDMI-Spezifikation].<br />
<br />
Update: Mittlerweile hat sich jemand daran gegeben, eine Interface mit einem Arduino zum implementieren: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1261237176/0<br />
<br />
===Schnittstelle zu Vaillant Heizgeräten===<br />
<br />
Die Heizgeräte verfügen über Schnittstellen, über die ein Fehlerlog ausgelesen, die Parametrierung vorgenommen oder Messwerte abgegriffen werden können. Diese Schnittstelle befindet sich am elektrischen Anschlusspanel auf der Rückseite des Bedienpanels.<br />
<br />
Mir sind zwei Generationen solcher Schnittstellen bekannt:<br />
<br />
====Ältere Geräte: RS232====<br />
<br />
Ältere Geräte verfügen über einen mit "X6" beschrifteten 6-poligen Modular-Buchse auf dem eine serielle Schnittstelle mit TTL-Pegel vorliegt.<br />
<br />
Ich habe anfangen, Informationen über diese Schnittstelle unter [[Vaillant X6 Schnittstelle]] zusammenzutragen.<br />
<br />
Zur Zeit frage ich mit einem Perl Script über das beschrieben Protokoll Daten zweier Heizgeräte ab. Dabei übernimmt jeweils ein seines MAX232 beraubter [[AVR-NET-IO]] die Aufgabe als [[YPort]]. Die Heizungen sind eine Atmotec VC 194/3 und eine Aurotherm VCS S 196 mit thermischer Solaranlage zur Warmwasserbereitung. Die Daten werden durch Munin zu Grafiken aufbereitet.<br />
<br />
[[Bild:vaillant_warmwasser-day.png]]<br />
<br />
====Neuere Geräte: EBUS====<br />
<br />
Neuere Geräte arbeiten mit dem EBUS, einem herstellerübergreifenden Protokoll. Der Bus liegt typischerweise auf Schraubklemmen, aber auch auf einer mit "X80" bezeichneten 4-poligen Modular-Buchse.<br />
<br />
Ich habe keinen Zugang zu solchen Systemen, so dass meine "Forschung" hier nicht voran kommt.</div>Malihttp://old.ethersex.de/index.php?title=Benutzer:Mali&diff=4285Benutzer:Mali2010-07-25T15:37:50Z<p>Mali: /* Neuere Geräte: EBUS */</p>
<hr />
<div>Hallo zusammen,<br />
<br />
was ATmega-Programmierung angeht, würde ich mich als Neuling bezeichnen. Vielleicht kann ich aber gerade deshalb ein bisschen zur Dokumentation des Ethersex-Projekts beitragen.<br />
<br />
<br />
==Projekte==<br />
<br />
Ich habe einige Ideen, wie ich Ethersex-Systeme einsetzen möchte.<br />
<br />
===Sender für HX2272 Funksteckdosen===<br />
<br />
Ich setze an verschiedenen Stellen Funksteckdosen ein, die ich gerne vom PC aus steuern möchte. In der Regel soll dies aus einem Perl-Script heraus geschehen. Die Realisierung erfolgte auf einem [[AVR Net-IO]] von Pollin und einem [[RFM12]]-Modul.<br />
<br />
===IR-Empfänger===<br />
<br />
Für zur Zeit zwei MythTV-Frontends suche ich nach einem flexiblen IR-Empfänger. Dabei möchte ich mich eigentlich nicht auf [[RC5]] festlegen, sondern die Dekodierung einem auf dem Frontend laufenden Lirc überlassen. Die Kommunikation könnte per Lirc-UDP-Protokoll erfolgen.<br />
<br />
===IR-Sender===<br />
<br />
Ganz ähnlich den erwähnten Funksteckdosen würde ich gerne Geräte, die sich über [[Infrarot-Fernbedienungen]] steuern lassen, vom Rechner aus steuern. Hierzu möchte ich einen flexiblen IR-Sender bauen, der neben dem [[RC5]]-Protokoll insbesondere auch das [[NEC-Protokoll]] unterstützen.<br />
<br />
===HDMI-CEC-Interface===<br />
<br />
Etwas wage sind meine Vorstellungen von einem HDMI-CEC-nach-LAN-Interface. Das HDMI-CEC-Protokoll (Consumer Electronics Control) erlaubt die Kommunikation zwischen HDMI-Geräten. Die Hersteller der HDMI-Geräte haben sich verschiedenste Marketing-Bezeichnungen für HDMI-CEC ausgedacht: Simplink (LG), Viera Link (Panasonic), Anynet+ (Samsung), Bravia Theatre Sync (Sony), Regza Link (Toshiba). Es handelt sich um einen 1-Wire-Bus auf einem separaten Pin des HDMI-Steckers, man kommt also nicht mit dem HDMI-Datenstrom in Kontakt.<br />
<br />
Ein paar Infos finden sich unter http://www.rainshadowtech.com sowie in der [http://www.hdmi.org/manufacturer/specification.aspx HDMI-Spezifikation].<br />
<br />
Update: Mittlerweile hat sich jemand daran gegeben, eine Interface mit einem Arduino zum implementieren: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1261237176/0<br />
<br />
===Schnittstelle zu Vaillant Heizgeräten===<br />
<br />
Die Heizgeräte verfügen über Schnittstellen, über die ein Fehlerlog ausgelesen, die Parametrierung vorgenommen oder Messwerte abgegriffen werden können. Diese Schnittstelle befindet sich am elektrischen Anschlusspanel auf der Rückseite des Bedienpanels.<br />
<br />
Mir sind zwei Generationen solcher Schnittstellen bekannt:<br />
<br />
====Ältere Geräte: RS232====<br />
<br />
Ältere Geräte verfügen über einen mit "X6" beschrifteten 6-poligen Modular-Buchse auf dem eine serielle Schnittstelle mit TTL-Pegel vorliegt.<br />
<br />
Ich habe anfangen, Informationen über diese Schnittstelle unter [[Vaillant X6 Schnittstelle]] zusammenzutragen.<br />
<br />
Zur Zeit frage ich mit einem Perl Script über das beschrieben Protokoll Daten zweier Heizgeräte ab. Dabei übernimmt jeweils ein seines MAX232 beraubter [[AVR-NET-IO]] die Aufgabe als [[Y-PORT]]. Die Heizungen sind eine Atmotec VC 194/3 und eine Aurotherm VCS S 196 mit thermischer Solaranlage zur Warmwasserbereitung. Die Daten werden durch Munin zu Grafiken aufbereitet.<br />
<br />
[[Bild:vaillant_warmwasser-day.png]]<br />
<br />
====Neuere Geräte: EBUS====<br />
<br />
Neuere Geräte arbeiten mit dem EBUS, einem herstellerübergreifenden Protokoll. Der Bus liegt typischerweise auf Schraubklemmen, aber auch auf einer mit "X80" bezeichneten 4-poligen Modular-Buchse.<br />
<br />
Ich habe keinen Zugang zu solchen Systemen, so dass meine "Forschung" hier nicht voran kommt.</div>Malihttp://old.ethersex.de/index.php?title=Benutzer:Mali&diff=4284Benutzer:Mali2010-07-25T15:36:52Z<p>Mali: /* Ältere Geräte: RS232 */</p>
<hr />
<div>Hallo zusammen,<br />
<br />
was ATmega-Programmierung angeht, würde ich mich als Neuling bezeichnen. Vielleicht kann ich aber gerade deshalb ein bisschen zur Dokumentation des Ethersex-Projekts beitragen.<br />
<br />
<br />
==Projekte==<br />
<br />
Ich habe einige Ideen, wie ich Ethersex-Systeme einsetzen möchte.<br />
<br />
===Sender für HX2272 Funksteckdosen===<br />
<br />
Ich setze an verschiedenen Stellen Funksteckdosen ein, die ich gerne vom PC aus steuern möchte. In der Regel soll dies aus einem Perl-Script heraus geschehen. Die Realisierung erfolgte auf einem [[AVR Net-IO]] von Pollin und einem [[RFM12]]-Modul.<br />
<br />
===IR-Empfänger===<br />
<br />
Für zur Zeit zwei MythTV-Frontends suche ich nach einem flexiblen IR-Empfänger. Dabei möchte ich mich eigentlich nicht auf [[RC5]] festlegen, sondern die Dekodierung einem auf dem Frontend laufenden Lirc überlassen. Die Kommunikation könnte per Lirc-UDP-Protokoll erfolgen.<br />
<br />
===IR-Sender===<br />
<br />
Ganz ähnlich den erwähnten Funksteckdosen würde ich gerne Geräte, die sich über [[Infrarot-Fernbedienungen]] steuern lassen, vom Rechner aus steuern. Hierzu möchte ich einen flexiblen IR-Sender bauen, der neben dem [[RC5]]-Protokoll insbesondere auch das [[NEC-Protokoll]] unterstützen.<br />
<br />
===HDMI-CEC-Interface===<br />
<br />
Etwas wage sind meine Vorstellungen von einem HDMI-CEC-nach-LAN-Interface. Das HDMI-CEC-Protokoll (Consumer Electronics Control) erlaubt die Kommunikation zwischen HDMI-Geräten. Die Hersteller der HDMI-Geräte haben sich verschiedenste Marketing-Bezeichnungen für HDMI-CEC ausgedacht: Simplink (LG), Viera Link (Panasonic), Anynet+ (Samsung), Bravia Theatre Sync (Sony), Regza Link (Toshiba). Es handelt sich um einen 1-Wire-Bus auf einem separaten Pin des HDMI-Steckers, man kommt also nicht mit dem HDMI-Datenstrom in Kontakt.<br />
<br />
Ein paar Infos finden sich unter http://www.rainshadowtech.com sowie in der [http://www.hdmi.org/manufacturer/specification.aspx HDMI-Spezifikation].<br />
<br />
Update: Mittlerweile hat sich jemand daran gegeben, eine Interface mit einem Arduino zum implementieren: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1261237176/0<br />
<br />
===Schnittstelle zu Vaillant Heizgeräten===<br />
<br />
Die Heizgeräte verfügen über Schnittstellen, über die ein Fehlerlog ausgelesen, die Parametrierung vorgenommen oder Messwerte abgegriffen werden können. Diese Schnittstelle befindet sich am elektrischen Anschlusspanel auf der Rückseite des Bedienpanels.<br />
<br />
Mir sind zwei Generationen solcher Schnittstellen bekannt:<br />
<br />
====Ältere Geräte: RS232====<br />
<br />
Ältere Geräte verfügen über einen mit "X6" beschrifteten 6-poligen Modular-Buchse auf dem eine serielle Schnittstelle mit TTL-Pegel vorliegt.<br />
<br />
Ich habe anfangen, Informationen über diese Schnittstelle unter [[Vaillant X6 Schnittstelle]] zusammenzutragen.<br />
<br />
Zur Zeit frage ich mit einem Perl Script über das beschrieben Protokoll Daten zweier Heizgeräte ab. Dabei übernimmt jeweils ein seines MAX232 beraubter [[AVR-NET-IO]] die Aufgabe als [[Y-PORT]]. Die Heizungen sind eine Atmotec VC 194/3 und eine Aurotherm VCS S 196 mit thermischer Solaranlage zur Warmwasserbereitung. Die Daten werden durch Munin zu Grafiken aufbereitet.<br />
<br />
[[Bild:vaillant_warmwasser-day.png]]<br />
<br />
====Neuere Geräte: EBUS====<br />
<br />
Neuere Geräte arbeiten mit dem EBUS, einem herstellerübergreifenden Protokoll. Der Bus liegt typischerweise auf Schraubklemmen, aber auch auf einer mit "X80" bezeichneten 4-poligen Modular-Buchse.</div>Malihttp://old.ethersex.de/index.php?title=Datei:Vaillant_warmwasser-day.png&diff=4283Datei:Vaillant warmwasser-day.png2010-07-25T15:35:52Z<p>Mali: Beispielhafte Grafik aus einen Messwerten einer Vaillant AuroTherm Heizung, erzeugt durch Munin</p>
<hr />
<div>Beispielhafte Grafik aus einen Messwerten einer Vaillant AuroTherm Heizung, erzeugt durch Munin</div>Malihttp://old.ethersex.de/index.php?title=Benutzer:Mali&diff=4282Benutzer:Mali2010-07-25T15:34:53Z<p>Mali: /* Ältere Geräte: RS232 */</p>
<hr />
<div>Hallo zusammen,<br />
<br />
was ATmega-Programmierung angeht, würde ich mich als Neuling bezeichnen. Vielleicht kann ich aber gerade deshalb ein bisschen zur Dokumentation des Ethersex-Projekts beitragen.<br />
<br />
<br />
==Projekte==<br />
<br />
Ich habe einige Ideen, wie ich Ethersex-Systeme einsetzen möchte.<br />
<br />
===Sender für HX2272 Funksteckdosen===<br />
<br />
Ich setze an verschiedenen Stellen Funksteckdosen ein, die ich gerne vom PC aus steuern möchte. In der Regel soll dies aus einem Perl-Script heraus geschehen. Die Realisierung erfolgte auf einem [[AVR Net-IO]] von Pollin und einem [[RFM12]]-Modul.<br />
<br />
===IR-Empfänger===<br />
<br />
Für zur Zeit zwei MythTV-Frontends suche ich nach einem flexiblen IR-Empfänger. Dabei möchte ich mich eigentlich nicht auf [[RC5]] festlegen, sondern die Dekodierung einem auf dem Frontend laufenden Lirc überlassen. Die Kommunikation könnte per Lirc-UDP-Protokoll erfolgen.<br />
<br />
===IR-Sender===<br />
<br />
Ganz ähnlich den erwähnten Funksteckdosen würde ich gerne Geräte, die sich über [[Infrarot-Fernbedienungen]] steuern lassen, vom Rechner aus steuern. Hierzu möchte ich einen flexiblen IR-Sender bauen, der neben dem [[RC5]]-Protokoll insbesondere auch das [[NEC-Protokoll]] unterstützen.<br />
<br />
===HDMI-CEC-Interface===<br />
<br />
Etwas wage sind meine Vorstellungen von einem HDMI-CEC-nach-LAN-Interface. Das HDMI-CEC-Protokoll (Consumer Electronics Control) erlaubt die Kommunikation zwischen HDMI-Geräten. Die Hersteller der HDMI-Geräte haben sich verschiedenste Marketing-Bezeichnungen für HDMI-CEC ausgedacht: Simplink (LG), Viera Link (Panasonic), Anynet+ (Samsung), Bravia Theatre Sync (Sony), Regza Link (Toshiba). Es handelt sich um einen 1-Wire-Bus auf einem separaten Pin des HDMI-Steckers, man kommt also nicht mit dem HDMI-Datenstrom in Kontakt.<br />
<br />
Ein paar Infos finden sich unter http://www.rainshadowtech.com sowie in der [http://www.hdmi.org/manufacturer/specification.aspx HDMI-Spezifikation].<br />
<br />
Update: Mittlerweile hat sich jemand daran gegeben, eine Interface mit einem Arduino zum implementieren: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1261237176/0<br />
<br />
===Schnittstelle zu Vaillant Heizgeräten===<br />
<br />
Die Heizgeräte verfügen über Schnittstellen, über die ein Fehlerlog ausgelesen, die Parametrierung vorgenommen oder Messwerte abgegriffen werden können. Diese Schnittstelle befindet sich am elektrischen Anschlusspanel auf der Rückseite des Bedienpanels.<br />
<br />
Mir sind zwei Generationen solcher Schnittstellen bekannt:<br />
<br />
====Ältere Geräte: RS232====<br />
<br />
Ältere Geräte verfügen über einen mit "X6" beschrifteten 6-poligen Modular-Buchse auf dem eine serielle Schnittstelle mit TTL-Pegel vorliegt.<br />
<br />
Ich habe anfangen, Informationen über diese Schnittstelle unter [[Vaillant X6 Schnittstelle]] zusammenzutragen.<br />
<br />
Zur Zeit frage ich mit einem Perl Script über das beschrieben Protokoll Daten zweier Heizgeräte ab. Dabei übernimmt jeweils ein seines MAX232 beraubter [[AVR-NET-IO]] die Aufgabe als [[Y-PORT]]. Die Heizungen sind eine Atmotec VC 194/3 und eine Aurotherm VCS S 196 mit thermischer Solaranlage zur Warmwasserbereitung. Die Daten werden durch Munin zu Grafiken aufbereitet.<br />
<br />
[[Media:vaillant_warmwasser-day.png]]<br />
<br />
====Neuere Geräte: EBUS====<br />
<br />
Neuere Geräte arbeiten mit dem EBUS, einem herstellerübergreifenden Protokoll. Der Bus liegt typischerweise auf Schraubklemmen, aber auch auf einer mit "X80" bezeichneten 4-poligen Modular-Buchse.</div>Malihttp://old.ethersex.de/index.php?title=Ethersex&diff=4162Ethersex2010-06-06T12:44:08Z<p>Mali: /* Mitmachen */</p>
<hr />
<div><div style="float:right"><br />
{| class="toc"<br />
|+ id="tocoverview" | '''Projektübersicht'''<br />
|-<br />
| Lizenz:<br />
| [http://en.wikipedia.org/wiki/GNU_General_Public_License GPL v3]<br />
|-<br />
| Sprache:<br />
| C<br />
|-<br />
| Plattform:<br />
| Atmel AVR ATmega<br />
|}<br />
<br />
<br />
</div><br />
<br />
== Das Ethersex-Projekt ... ==<br />
<br />
ist eine universelle Plattform um Mikrocontroller per IP-Protokoll anzusprechen und stellt eine solide Basis für eigene Entwicklungen dar.<br />
Ethersex wurde im August 2007 von stesie als alternative Firmware für fd0s [http://www.lochraster.org/etherrape/ Etherrape] ins Leben gerufen. Namensgebend war seinerzeit die Erweiterung um [[IPv6]]-Unterstützung. Seither hat sich jedoch viel getan, sodass inzwischen nicht mehr nur die Etherrape-Hardware als Plattform unterstützt wird, sondern auch diverse andere Atmega Hardware Projekte. Der Code ist inzwischen weitgehend stabil und wird auch im professionellen Umfeld eingesetzt.<br />
<br />
=== Hardware ===<br />
Das Ethersex-Projekt bietet keine Bausätze oder Fertiggeräte zum Verkauf an. Hier sei auf das von Alexander Neumann angebotene [[Etherrape]], das [[AVR Webmodul]] von Ulrich Radig oder das Pollin [[AVR-NET-IO]] hingewiesen. Wer mit Lochrasterplatinen &amp; Co. schon ein wenig Erfahrung gesammelt hat, kann auch einen individuellen Nachbau in Eigenregie erwägen. Einen Überblick bietet die Galerie [[Unterstützte Hardware|unterstützter Hardware]].<br />
<br />
=== Was zeichnet Ethersex aus? ===<br />
* TCP/IP, [[ZBUS]] und diverse andere Protokolle<br />
* Datenübertragung per Ethernet, Funk ([[RFM12]]), über [[USB]] oder per seriellem Bus<br />
* Verschlüsselte Kommunikation [[OpenVPN]] und [[IPv6]]<br />
* Steuerung über mächtiges, eigenes '''Ethersex Command''' ([[ECMD]]) Protokoll per [[ECMD Protocols#ECMD via HTTP|http]], [[ECMD Protocols#ECMD via TCP|TCP/IP]], UDP/IP, [[I2C]] und [[USB]]<br />
* Datenablage auf [[DataFlash]]-Speicher, SD-Karten, I2C-EEPROMs oder dem eingebautem EEPROM<br />
* Leichte Erweiterbarkeit mit eigenen Modulen<br />
* Module können über eine Bedienoberfläche einfach ein und ausgeschaltet werden, so dass nur das gewünschte auch in der Firmware landet<br />
... und vieles mehr, siehe [[Feature Liste]] oder [[Screenprint]]<br />
<br />
=== Erste Schritte ===<br />
* [[Voraussetzungen|Voraussetzungen]] um ethersex compilieren zu können<br />
* Den Quellcode wie unter [[Download]] beschrieben herunterladen<br />
* [[:Kategorie:StepByStep|Schritt für Schritt]] zum eigenen Firmware Image<br />
* Was muß ich tun wenn ich externe [[Feature_Liste#Kontakt_zur_Au.C3.9Fenwelt|Schaltungen]] ansteuern oder anschließen will, zum Beispiel Temperatursensoren oder ein [[LCD]]?<br />
* [[:Kategorie:Erfahrungsberichte|Erfahrungsberichte]] anderer Anwender<br />
* Wenn du Fragen hast, ist es sinnvoll, erst einmal die [[FAQ|Häufig gestellten Fragen]] zu lesen. Du kannst dich auch direkt an unsere Mailingliste wenden. Details siehe [[Community]].<br />
<br />
Es gibt auch einen [http://www.ethersex.de/firmware-builder/list.cgi Ethersex Firmware Builder], der soweit vorgefertigte Firmware-Images individualisiert und fertig zum Herunterladen anbietet, z.B. für das [http://www.ethersex.de/firmware-builder/input.cgi?profile=avr-net-io AVR-NET-IO von Pollin]. Diese Images eigenen sich insbesondere für erste Gehversuche und können nur in sehr geringem Umfang konfiguriert werden.<br />
<br />
=== Bugs ===<br />
* Bitte prüfe erst, ob deine Entwicklungsumgebung alle [[Voraussetzungen]] erfüllt. In nicht wenigen Fällen fehlt z.B. das Tool m4.<br />
* Du kannst Kontakt mit uns über die Mailingliste aufnehmen. Details siehe [[Community]].<br />
* Nutze unseren [http://bugs.ethersex.de Bugtracker]<br />
<br />
=== Mitmachen ===<br />
Die Ethersex Webseite basiert auf einer Wiki Software, d.h. sobald du dich angemeldet hast, kannst du hier eigene Beiträge verfassen oder bestehende verbessern. Wenn du am Projekt mitarbeiten willst, findest du vielleicht folgende Artikel ganz interessant:<br />
* [[Coding style]]<br />
* Wie erstellt man [[Patches]] richtig<br />
* Hinweise für [[Code Optimierungen]] (Geschwindigkeit und Platzoptimierungen)<br />
* [[Eigenes Modul hinzufügen]] (Neuer i2c Chip?, neue Funksteckdosen? Hier ist ein Einstieg für das Erstellen eines eigenen Moduls.)<br />
* [[Ethersex Core]] (Erklärt die grundlegenden Hardwareabstraktionen von Ethersex.)<br />
* [[Hilfe:Hilfe|Dokumentation zur Wiki Software]]<br />
* [[Ethersex_History|Ethersex History]] (Was die letzten Monate an ethersex passiert ist)<br />
<br />
[[Category:Ethersex]]<br />
[[Category:Zerties]]</div>Malihttp://old.ethersex.de/index.php?title=Ethersex&diff=4161Ethersex2010-06-06T12:43:42Z<p>Mali: /* Mitmachen */</p>
<hr />
<div><div style="float:right"><br />
{| class="toc"<br />
|+ id="tocoverview" | '''Projektübersicht'''<br />
|-<br />
| Lizenz:<br />
| [http://en.wikipedia.org/wiki/GNU_General_Public_License GPL v3]<br />
|-<br />
| Sprache:<br />
| C<br />
|-<br />
| Plattform:<br />
| Atmel AVR ATmega<br />
|}<br />
<br />
<br />
</div><br />
<br />
== Das Ethersex-Projekt ... ==<br />
<br />
ist eine universelle Plattform um Mikrocontroller per IP-Protokoll anzusprechen und stellt eine solide Basis für eigene Entwicklungen dar.<br />
Ethersex wurde im August 2007 von stesie als alternative Firmware für fd0s [http://www.lochraster.org/etherrape/ Etherrape] ins Leben gerufen. Namensgebend war seinerzeit die Erweiterung um [[IPv6]]-Unterstützung. Seither hat sich jedoch viel getan, sodass inzwischen nicht mehr nur die Etherrape-Hardware als Plattform unterstützt wird, sondern auch diverse andere Atmega Hardware Projekte. Der Code ist inzwischen weitgehend stabil und wird auch im professionellen Umfeld eingesetzt.<br />
<br />
=== Hardware ===<br />
Das Ethersex-Projekt bietet keine Bausätze oder Fertiggeräte zum Verkauf an. Hier sei auf das von Alexander Neumann angebotene [[Etherrape]], das [[AVR Webmodul]] von Ulrich Radig oder das Pollin [[AVR-NET-IO]] hingewiesen. Wer mit Lochrasterplatinen &amp; Co. schon ein wenig Erfahrung gesammelt hat, kann auch einen individuellen Nachbau in Eigenregie erwägen. Einen Überblick bietet die Galerie [[Unterstützte Hardware|unterstützter Hardware]].<br />
<br />
=== Was zeichnet Ethersex aus? ===<br />
* TCP/IP, [[ZBUS]] und diverse andere Protokolle<br />
* Datenübertragung per Ethernet, Funk ([[RFM12]]), über [[USB]] oder per seriellem Bus<br />
* Verschlüsselte Kommunikation [[OpenVPN]] und [[IPv6]]<br />
* Steuerung über mächtiges, eigenes '''Ethersex Command''' ([[ECMD]]) Protokoll per [[ECMD Protocols#ECMD via HTTP|http]], [[ECMD Protocols#ECMD via TCP|TCP/IP]], UDP/IP, [[I2C]] und [[USB]]<br />
* Datenablage auf [[DataFlash]]-Speicher, SD-Karten, I2C-EEPROMs oder dem eingebautem EEPROM<br />
* Leichte Erweiterbarkeit mit eigenen Modulen<br />
* Module können über eine Bedienoberfläche einfach ein und ausgeschaltet werden, so dass nur das gewünschte auch in der Firmware landet<br />
... und vieles mehr, siehe [[Feature Liste]] oder [[Screenprint]]<br />
<br />
=== Erste Schritte ===<br />
* [[Voraussetzungen|Voraussetzungen]] um ethersex compilieren zu können<br />
* Den Quellcode wie unter [[Download]] beschrieben herunterladen<br />
* [[:Kategorie:StepByStep|Schritt für Schritt]] zum eigenen Firmware Image<br />
* Was muß ich tun wenn ich externe [[Feature_Liste#Kontakt_zur_Au.C3.9Fenwelt|Schaltungen]] ansteuern oder anschließen will, zum Beispiel Temperatursensoren oder ein [[LCD]]?<br />
* [[:Kategorie:Erfahrungsberichte|Erfahrungsberichte]] anderer Anwender<br />
* Wenn du Fragen hast, ist es sinnvoll, erst einmal die [[FAQ|Häufig gestellten Fragen]] zu lesen. Du kannst dich auch direkt an unsere Mailingliste wenden. Details siehe [[Community]].<br />
<br />
Es gibt auch einen [http://www.ethersex.de/firmware-builder/list.cgi Ethersex Firmware Builder], der soweit vorgefertigte Firmware-Images individualisiert und fertig zum Herunterladen anbietet, z.B. für das [http://www.ethersex.de/firmware-builder/input.cgi?profile=avr-net-io AVR-NET-IO von Pollin]. Diese Images eigenen sich insbesondere für erste Gehversuche und können nur in sehr geringem Umfang konfiguriert werden.<br />
<br />
=== Bugs ===<br />
* Bitte prüfe erst, ob deine Entwicklungsumgebung alle [[Voraussetzungen]] erfüllt. In nicht wenigen Fällen fehlt z.B. das Tool m4.<br />
* Du kannst Kontakt mit uns über die Mailingliste aufnehmen. Details siehe [[Community]].<br />
* Nutze unseren [http://bugs.ethersex.de Bugtracker]<br />
<br />
=== Mitmachen ===<br />
Die Ethersex Webseite basiert auf einer Wiki Software, d.h. sobald du dich angemeldet hast, kannst du hier eigene Beiträge verfassen oder bestehende verbessern. Wenn du am Projekt mitarbeiten willst, findest du vielleicht folgende Artikel ganz interessant:<br />
* [[Coding style]]<br />
* Wie erstellt man [[Patches]] richtig<br />
* Hinweise für [[Code Optimierungen]] (Geschwindigkeit und Platzoptimierungen)<br />
* [[Eigenes Modul hinzufügen]] (Neuer i2c Chip?, neue Funksteckdosen? Hier ist ein Einstieg für das Erstellen eines eigenen Moduls.)<br />
* [[Ethersex Core]] (Erklärt die grundlegenden Hardwareabstraktionen von Ethersex.)<br />
* [[Hilfe:Hilfe Dokumentation zur Wiki Software]]<br />
* [[Ethersex_History|Ethersex History]] (Was die letzten Monate an ethersex passiert ist)<br />
<br />
[[Category:Ethersex]]<br />
[[Category:Zerties]]</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3920Vaillant X6 Schnittstelle2010-04-10T09:52:27Z<p>Mali: </p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 06.01.10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
'''Alle Informationen ohne Gewähr. Durch Kommunikation über die X6-Schnittstelle kann man die Konfiguration des Geräts ändern. Dadurch ist ein sicherer und gefahrloser Betrieb möglicherweise nicht mehr gegeben. Es kann zu Sach- und Personenschäden kommen. Die Verwendung aller Informationen erfolgt auf eigene Gefahr!'''<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Sowas wie ein Nachrichtentyp:<br />
0x00 Normale Nachrichten <br />
0x01 Fehlermeldung Checksum-Fehler?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x03 Fehlermeldung?<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
0x80 Änderung von Parametern<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme<br />
<br />
===Prüfsumme===<br />
<br />
Zur Berechnung der Checksum werden die Bytes nacheinander XOR-verknüpft und das Zwischenergebnis dann jeweils um 1 bit nach links verschoben:<br />
<br />
sub checksum<br />
{<br />
my $string = $_[0];<br />
my $checksum; <br />
<br />
for (my $i = 0; $i < length($string); $i++)<br />
{<br />
if ($checksum & 0x80)<br />
{<br />
$checksum = ($checksum << 1 | 1) & 0xFF;<br />
# ???<br />
$checksum = $checksum ^ 0x18;<br />
}<br />
else<br />
{<br />
$checksum = $checksum << 1;<br />
}<br />
$checksum = $checksum ^ ord(substr($string, $i, 1));<br />
}<br />
return $checksum;<br />
}<br />
<br />
Den Quelltext darf gerne mal jemand in C konvertieren ;-) ...<br />
<br />
Beim Finden des Algorithmus waren kurze Nachrichten wie <tt>03 03 05</tt> und <tt>03 01 07</tt> nützlich. Es fiel dann aber auf, dass die Berechnung immer dann zu einem anderen Ergebnis führt, wenn das Zwischenergebnis im Verlauf der Berechnung größer als FFh (127) wird. In der Nachricht <tt>07 00 00 00 98 05 CC</tt> ist dies erst beim letzten Datenbyte der Fall. Von dort konnte man also zurückrechnen, was man am Zwischenergebnis ändern muss, um letztendlich auf die gleiche Prüfsumme zu kommen wie das Gerät. Diese Änderung ist genau ein XOR mit 18h. Siehe auch [http://coding.derkeiler.com/Archive/General/comp.arch.embedded/2008-06/msg00256.html] und [http://www.gamefaqs.com/console/nes/file/563408/47175].<br />
<br />
Ich sehe gerade, dass sich da schon jemand anderes mit beschäftigt hat. Er kommt im Prinzip zum gleichen Ergebnis: http://ab-log.ru/smart-house/heating-automation/vaillant-rs232 (russisch).<br />
<br />
===Befehle===<br />
<br />
Die bekannten Befehlsnachrichten sind 7 Byte lang und haben einen einheitlichen Aufbau. Dem 1 Byte langen Befehl werden zwei Null-Bytes vorangestellt, dann folgt ein Byte, das die Länge der erwarteten Daten angibt:<br />
<br />
00 00 98 05<br />
<br />
Der resultierende String wird nach dem oben geschilderten Aufbau von Nachrichten verpackt. Dabei ist das noch unbekannte Byte 2 ebenfalls "00h". Es ergibt sich:<br />
<br />
07 00 '''00 00 98 05''' CC<br />
<br />
Was das Byte angeht, das die Datenlänge angibt, bin ich noch nicht ganz sicher. Mein Gerät scheint es nicht allzu ernst zu nehmen. Verändert man das entsprechende Byte in der Anfrage, sendet weiterhin die ursprüngliche Anzahl von Bytes und somit eine andere Zahl von Bytes als angefordert:<br />
<br />
07 00 00 00 98 '''03''' CA<br />
08 00 '''02 2A FD D5 00''' 37<br />
<br />
====Liste der Befehle====<br />
<br />
{|class=wikitable<br />
!Befehl<br />
!Funktion<br />
!Datenbytes<br />
!Typ<br />
|-<br />
|01h<br />
|Sollwert Brauchwassertemperatur<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|02h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|03h<br />
|Unbekannter Statuswert<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|04h<br />
|Sollwert Speicher<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|05h<br />
|Flammsignal<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|06h<br />
|Fehlerspeicher?<br />
|28<br />
|Fehlerspeicher<br />
|-<br />
|07h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|08h<br />
|Sommer/Winter-Schalter<br />
|1<br />
|Status (Sommer/Winter)<br />
|-<br />
|09h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|0Ah<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|0Bh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|0Ch<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|0Dh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|0Eh<br />
|Status Raumthermostat<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|16h<br />
|Brauchwassersensor<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|17h<br />
|Speichertemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|18h<br />
|Vorlauftemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|19h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|1Fh<br />
|Anzahl GFA Störungen<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|20h<br />
|Anzahl STB Abschaltungen<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|21h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|22h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|23h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|24h<br />
|Drehzahlsollwert<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|25h<br />
|Sollwert Vorlauf Ext. Regler 7-8-9<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|26h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|28h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|29h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|2Eh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|32h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|38h<br />
|Verbleibende Brennersperrzeit<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|39h<br />
|Sollwert Vorlauftemperatur<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|3Ah<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|3Ch<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|3Dh<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|3Eh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|3Fh<br />
|Status externe Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|40h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|42h<br />
|Stellung VUV<br />
|1<br />
|Status (?)<br />
|-<br />
|43h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|44h<br />
|Status interne Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|45h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|46h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|47h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|48h<br />
|Status Gasmagnetventil<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|49h<br />
|Status Zünder<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|4Bh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|4Ch<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|4Dh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|4Eh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|4Fh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|50h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|51h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|53h<br />
|Status Unbekannt<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|54h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|55h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|57h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|58h<br />
|Anforderung Warmwasser C1/C2<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|5Bh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|5Ch<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|5Dh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|5Eh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|5Fh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|63h<br />
|Wasserpumpennachlaufzeit nach Speicherladung<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|64h<br />
|Wasserpumpennachlaufzeit nach Heizbetrieb<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|65h<br />
|Korrekturwert Aussentemperatur<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|66h<br />
|Speicherladezeit<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|68h<br />
|?<br />
|8<br />
|?<br />
|-<br />
|69h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Ah<br />
|Aussentemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|6Bh<br />
|Ext. Vor-/Rücklauftemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|6Ch<br />
|Heizungsteillast<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Dh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|6Eh<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Fh<br />
|Zähler 3 Zündversuche<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|70h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|71h<br />
|Status Speicherfreigabe Schaltuhr<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|72h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|73h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|74h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|75h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|76h<br />
|?<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|77h<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|7Ah<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|7Bh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|7Ch<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|81h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|82h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|83h<br />
|Drehzahlistwert<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|89h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|8Eh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|8Fh<br />
|?<br />
|9<br />
|?<br />
|-<br />
|98h<br />
|Rücklauftemperatur<br />
|5<br />
|Zwei Analogwerte (2 x 2 byte) + ein Sensorstatus<br />
|-<br />
|99h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|9Ah<br />
|Unbekannter Temperaturwert<br />
|5<br />
|Zwei Analogwerte (2 x 2 byte) + ein Sensorstatus<br />
|-<br />
|9Bh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|9Dh<br />
|Offset Warmstartsollwert<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|9Eh<br />
|Status Speicherladepumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|9Fh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|A0h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A1h<br />
|Sollwert interne Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|A2h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|A3h<br />
|?<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|A4h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|A5h<br />
|Max. Vorlauftemperatur<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A6h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A7h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A8h<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A9h<br />
|Unbekannter Wert<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|AAh<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|ABh<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|ACh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|ADh<br />
|?<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|AEh<br />
|?<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|AFh<br />
|Status Zirkulationspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B0h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B2h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B3h<br />
|Status Rücklaufregelung<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B4h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B6h<br />
|Speichertemperatur unten<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|B7h<br />
|Kollektortemperatur (nein!)<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|B8h<br />
|Kollektortemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|B9h<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|C3h<br />
|Hyterese Solarpumpe<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|CAh<br />
|?<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|D4h<br />
|?<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|D5h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|D6h<br />
|?<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|}<br />
<br />
====Andere Befehle====<br />
<br />
Nicht alle Befehle passen in das genannte Schema.<br />
<br />
=====07 02 00 00 00 04 C4=====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
07 02 00 00 00 04 C4<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04". Weiterhin hat das unbekannte Byte 2 den Wert "02h".<br />
<br />
===Anworten des Geräts===<br />
<br />
Das Gerät anwortet mit Nachrichten, die den oben angegebenen Aufbau haben. Dabei das unbekannte Byte 2 anzugeben, ob es sich um eine "normale" Antwort ("00h") oder um eine andere Antwort handelt.<br />
<br />
====Normale Antworten====<br />
<br />
Bei normalen Antworten hat Byte 2 den Wert "00h". Ab Byte 3 folgenden dann die angeforderten Daten. Hierbei werden verschiedene Kodierungen verwendet. Analogwerte werden in einem oder zwei Bytes kodiert, je nach Befehl werden ein oder zwei derart kodierte Analogwerte zurückgegeben. Für Statusmeldungen scheint es verschiedene Kodierungen zu geben, die jeweils ein Byte verwenden.<br />
<br />
====Andere Antworten====<br />
<br />
{|class=wikitable<br />
!Nachricht<br />
!Bedeutung<br />
|-<br />
|<tt>03 '''00''' 06</tt><br />
|Bestätigung Parameteränderung<br />
|-<br />
|<tt>03 '''01''' 07</tt><br />
|Checksummenfehler?<br />
|-<br />
|<tt>03 '''03''' 05</tt><br />
|Nicht unterstützt, nicht vorhanden?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C. Negative Werte werden in Zweikomplement-Darstellung übertragen.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
FF21h = -223d => -223/16 °C = -13,94 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
F0 = Inaktiv<br />
0F = Aktiv<br />
<br />
oder<br />
<br />
00 = Inktiv<br />
01 = Aktiv<br />
<br />
<br />
<br />
<br />
<br />
==Links==<br />
<br />
* http://www.hx7.net/vaillant/ - liest Daten per EBUS mit vrDialog aus und stellt sie mit RRDTool grafisch dar<br />
<br />
* http://ab-log.ru/smart-house/heating-automation/vaillant-rs232 ([http://translate.google.de/translate?u=http%3A%2F%2Fab-log.ru%2Fsmart-house%2Fheating-automation%2Fvaillant-rs232&sl=ru&tl=de&hl=&ie=UTF-8 Google Übersetzung]) - liest Daten per X6 aus, beschreibt auch, wie man Parameter ändert.</div>Malihttp://old.ethersex.de/index.php?title=Benutzer:Mali&diff=3494Benutzer:Mali2010-01-24T20:43:06Z<p>Mali: /* HDMI-CEC-Interface */</p>
<hr />
<div>Hallo zusammen,<br />
<br />
was ATmega-Programmierung angeht, würde ich mich als Neuling bezeichnen. Vielleicht kann ich aber gerade deshalb ein bisschen zur Dokumentation des Ethersex-Projekts beitragen.<br />
<br />
<br />
==Projekte==<br />
<br />
Ich habe einige Ideen, wie ich Ethersex-Systeme einsetzen möchte.<br />
<br />
===Sender für HX2272 Funksteckdosen===<br />
<br />
Ich setze an verschiedenen Stellen Funksteckdosen ein, die ich gerne vom PC aus steuern möchte. In der Regel soll dies aus einem Perl-Script heraus geschehen. Die Realisierung erfolgte auf einem [[AVR Net-IO]] von Pollin und einem [[RFM12]]-Modul.<br />
<br />
===IR-Empfänger===<br />
<br />
Für zur Zeit zwei MythTV-Frontends suche ich nach einem flexiblen IR-Empfänger. Dabei möchte ich mich eigentlich nicht auf [[RC5]] festlegen, sondern die Dekodierung einem auf dem Frontend laufenden Lirc überlassen. Die Kommunikation könnte per Lirc-UDP-Protokoll erfolgen.<br />
<br />
===IR-Sender===<br />
<br />
Ganz ähnlich den erwähnten Funksteckdosen würde ich gerne Geräte, die sich über [[Infrarot-Fernbedienungen]] steuern lassen, vom Rechner aus steuern. Hierzu möchte ich einen flexiblen IR-Sender bauen, der neben dem [[RC5]]-Protokoll insbesondere auch das [[NEC-Protokoll]] unterstützen.<br />
<br />
===HDMI-CEC-Interface===<br />
<br />
Etwas wage sind meine Vorstellungen von einem HDMI-CEC-nach-LAN-Interface. Das HDMI-CEC-Protokoll (Consumer Electronics Control) erlaubt die Kommunikation zwischen HDMI-Geräten. Die Hersteller der HDMI-Geräte haben sich verschiedenste Marketing-Bezeichnungen für HDMI-CEC ausgedacht: Simplink (LG), Viera Link (Panasonic), Anynet+ (Samsung), Bravia Theatre Sync (Sony), Regza Link (Toshiba). Es handelt sich um einen 1-Wire-Bus auf einem separaten Pin des HDMI-Steckers, man kommt also nicht mit dem HDMI-Datenstrom in Kontakt.<br />
<br />
Ein paar Infos finden sich unter http://www.rainshadowtech.com sowie in der [http://www.hdmi.org/manufacturer/specification.aspx HDMI-Spezifikation].<br />
<br />
Update: Mittlerweile hat sich jemand daran gegeben, eine Interface mit einem Arduino zum implementieren: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1261237176/0<br />
<br />
===Schnittstelle zu Vaillant Heizgeräten===<br />
<br />
Die Heizgeräte verfügen über Schnittstellen, über die ein Fehlerlog ausgelesen, die Parametrierung vorgenommen oder Messwerte abgegriffen werden können. Diese Schnittstelle befindet sich am elektrischen Anschlusspanel auf der Rückseite des Bedienpanels.<br />
<br />
Mir sind zwei Generationen solcher Schnittstellen bekannt:<br />
<br />
====Ältere Geräte: RS232====<br />
<br />
Ältere Geräte verfügen über einen mit "X6" beschrifteten 6-poligen Modular-Buchse auf dem eine serielle Schnittstelle mit TTL-Pegel vorliegt.<br />
<br />
Ich habe anfangen, Informationen über diese Schnittstelle unter [[Vaillant X6 Schnittstelle]] zusammenzutragen.<br />
<br />
====Neuere Geräte: EBUS====<br />
<br />
Neuere Geräte arbeiten mit dem EBUS, einem herstellerübergreifenden Protokoll. Der Bus liegt typischerweise auf Schraubklemmen, aber auch auf einer mit "X80" bezeichneten 4-poligen Modular-Buchse.</div>Malihttp://old.ethersex.de/index.php?title=Benutzer:Mali&diff=3493Benutzer:Mali2010-01-24T20:42:51Z<p>Mali: /* HDMI-CEC-Interface */</p>
<hr />
<div>Hallo zusammen,<br />
<br />
was ATmega-Programmierung angeht, würde ich mich als Neuling bezeichnen. Vielleicht kann ich aber gerade deshalb ein bisschen zur Dokumentation des Ethersex-Projekts beitragen.<br />
<br />
<br />
==Projekte==<br />
<br />
Ich habe einige Ideen, wie ich Ethersex-Systeme einsetzen möchte.<br />
<br />
===Sender für HX2272 Funksteckdosen===<br />
<br />
Ich setze an verschiedenen Stellen Funksteckdosen ein, die ich gerne vom PC aus steuern möchte. In der Regel soll dies aus einem Perl-Script heraus geschehen. Die Realisierung erfolgte auf einem [[AVR Net-IO]] von Pollin und einem [[RFM12]]-Modul.<br />
<br />
===IR-Empfänger===<br />
<br />
Für zur Zeit zwei MythTV-Frontends suche ich nach einem flexiblen IR-Empfänger. Dabei möchte ich mich eigentlich nicht auf [[RC5]] festlegen, sondern die Dekodierung einem auf dem Frontend laufenden Lirc überlassen. Die Kommunikation könnte per Lirc-UDP-Protokoll erfolgen.<br />
<br />
===IR-Sender===<br />
<br />
Ganz ähnlich den erwähnten Funksteckdosen würde ich gerne Geräte, die sich über [[Infrarot-Fernbedienungen]] steuern lassen, vom Rechner aus steuern. Hierzu möchte ich einen flexiblen IR-Sender bauen, der neben dem [[RC5]]-Protokoll insbesondere auch das [[NEC-Protokoll]] unterstützen.<br />
<br />
===HDMI-CEC-Interface===<br />
<br />
Etwas wage sind meine Vorstellungen von einem HDMI-CEC-nach-LAN-Interface. Das HDMI-CEC-Protokoll (Consumer Electronics Control) erlaubt die Kommunikation zwischen HDMI-Geräten. Die Hersteller der HDMI-Geräte haben sich verschiedenste Marketing-Bezeichnungen für HDMI-CEC ausgedacht: Simplink (LG), Viera Link (Panasonic), Anynet+ (Samsung), Bravia Theatre Sync (Sony), Regza Link (Toshiba). Es handelt sich um einen 1-Wire-Bus auf einem separaten Pin des HDMI-Steckers, man kommt also nicht mit dem HDMI-Datenstrom in Kontakt.<br />
<br />
Ein paar Infos finden sich unter http://www.rainshadowtech.com sowie in der [http://www.hdmi.org/manufacturer/specification.aspx HDMI-Spezifikation].<br />
<br />
Mittlerweile hat sich jemand daran gegeben, eine Interface mit einem Arduino zum implementieren: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1261237176/0<br />
<br />
===Schnittstelle zu Vaillant Heizgeräten===<br />
<br />
Die Heizgeräte verfügen über Schnittstellen, über die ein Fehlerlog ausgelesen, die Parametrierung vorgenommen oder Messwerte abgegriffen werden können. Diese Schnittstelle befindet sich am elektrischen Anschlusspanel auf der Rückseite des Bedienpanels.<br />
<br />
Mir sind zwei Generationen solcher Schnittstellen bekannt:<br />
<br />
====Ältere Geräte: RS232====<br />
<br />
Ältere Geräte verfügen über einen mit "X6" beschrifteten 6-poligen Modular-Buchse auf dem eine serielle Schnittstelle mit TTL-Pegel vorliegt.<br />
<br />
Ich habe anfangen, Informationen über diese Schnittstelle unter [[Vaillant X6 Schnittstelle]] zusammenzutragen.<br />
<br />
====Neuere Geräte: EBUS====<br />
<br />
Neuere Geräte arbeiten mit dem EBUS, einem herstellerübergreifenden Protokoll. Der Bus liegt typischerweise auf Schraubklemmen, aber auch auf einer mit "X80" bezeichneten 4-poligen Modular-Buchse.</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3445Vaillant X6 Schnittstelle2010-01-09T16:08:04Z<p>Mali: </p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 06.01.10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldung Checksum-Fehler?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x03 Fehlermeldung?<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme<br />
<br />
===Prüfsumme===<br />
<br />
Zur Berechnung der Checksum werden die Bytes nacheinander XOR-verknüpft und das Zwischenergebnis dann jeweils um 1 bit nach links verschoben:<br />
<br />
sub checksum<br />
{<br />
my $string = $_[0];<br />
my $checksum; <br />
<br />
for (my $i = 0; $i < length($string); $i++)<br />
{<br />
if ($checksum & 0x80)<br />
{<br />
$checksum = ($checksum << 1 | 1) & 0xFF;<br />
# ???<br />
$checksum = $checksum ^ 0x18;<br />
}<br />
else<br />
{<br />
$checksum = $checksum << 1;<br />
}<br />
$checksum = $checksum ^ ord(substr($string, $i, 1));<br />
}<br />
return $checksum;<br />
}<br />
<br />
Den Quelltext darf gerne mal jemand in C konvertieren ;-) ...<br />
<br />
Beim Finden des Algorithmus waren kurze Nachrichten wie <tt>03 03 05</tt> und <tt>03 01 07</tt> nützlich. Es fiel dann aber auf, dass die Berechnung immer dann zu einem anderen Ergebnis führt, wenn das Zwischenergebnis im Verlauf der Berechnung größer als FFh (127) wird. In der Nachricht <tt>07 00 00 00 98 05 CC</tt> ist dies erst beim letzten Datenbyte der Fall. Von dort konnte man also zurückrechnen, was man am Zwischenergebnis ändern muss, um letztendlich auf die gleiche Prüfsumme zu kommen wie das Gerät. Diese Änderung ist genau ein XOR mit 18h. Siehe auch [http://coding.derkeiler.com/Archive/General/comp.arch.embedded/2008-06/msg00256.html] und [http://www.gamefaqs.com/console/nes/file/563408/47175].<br />
<br />
===Befehle===<br />
<br />
Die bekannten Befehlsnachrichten sind 7 Byte lang und haben einen einheitlichen Aufbau. Dem 1 Byte langen Befehl werden zwei Null-Bytes vorangestellt, dann folgt ein Byte, das die Länge der erwarteten Daten angibt:<br />
<br />
00 00 98 05<br />
<br />
Der resultierende String wird nach dem oben geschilderten Aufbau von Nachrichten verpackt. Dabei ist das noch unbekannte Byte 2 ebenfalls "00h". Es ergibt sich:<br />
<br />
07 00 '''00 00 98 05''' CC<br />
<br />
Was das Byte angeht, das die Datenlänge angibt, bin ich noch nicht ganz sicher. Mein Gerät scheint es nicht allzu ernst zu nehmen. Verändert man das entsprechende Byte in der Anfrage, sendet weiterhin die ursprüngliche Anzahl von Bytes und somit eine andere Zahl von Bytes als angefordert:<br />
<br />
07 00 00 00 98 '''03''' CA<br />
08 00 '''02 2A FD D5 00''' 37<br />
<br />
====Liste der Befehle====<br />
<br />
{|class=wikitable<br />
!Befehl<br />
!Funktion<br />
!Datenbytes<br />
!Typ<br />
|-<br />
|01h<br />
|Sollwert Brauchwassertemperatur<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|03h<br />
|Unbekannter Statuswert<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|04h<br />
|Sollwert Speicher<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|05h<br />
|Flammsignal<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|08h<br />
|Sommer/Winter-Schalter<br />
|1<br />
|Status (Sommer/Winter)<br />
|-<br />
|0Eh<br />
|Status Raumthermostat<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|17h<br />
|Speichertemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|18h<br />
|Vorlauftemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|1Fh<br />
|Anzahl GFA Störungen<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|20h<br />
|Anzahl STB Abschaltungen<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|24h<br />
|Drehzahlsollwert<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|25h<br />
|Sollwert Vorlauf Ext. Regler 7-8-9<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|38h<br />
|Verbleibende Brennersperrzeit<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|39h<br />
|Sollwert Vorlauftemperatur<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|3Fh<br />
|Status externe Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|42h<br />
|Stellung VUV<br />
|1<br />
|Status (?)<br />
|-<br />
|44h<br />
|Status interne Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|48h<br />
|Status Gasmagnetventil<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|49h<br />
|Status Zünder<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|53h<br />
|Status Unbekannt<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|58h<br />
|Anforderung Warmwasser C1/C2<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|63h<br />
|Wasserpumpennachlaufzeit nach Speicherladung<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|65h<br />
|Korrekturwert Aussentemperatur<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|66h<br />
|Speicherladezeit<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Ah<br />
|Aussentemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|6Bh<br />
|Ext. Vor-/Rücklauftemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|6Ch<br />
|Heizungsteillast<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Fh<br />
|Zähler 3 Zündversuche<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|71h<br />
|Status Speicherfreigabe Schaltuhr<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|83h<br />
|Drehzahlistwert<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|98h<br />
|Rücklauftemperatur<br />
|5<br />
|Zwei Analogwerte (2 x 2 byte) + ein Sensorstatus<br />
|-<br />
|9Ah<br />
|Unbekannter Temperaturwert<br />
|5<br />
|Zwei Analogwerte (2 x 2 byte) + ein Sensorstatus<br />
|-<br />
|9Dh<br />
|Offset Warmstartsollwert<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|9Eh<br />
|Status Speicherladepumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|A1h<br />
|Sollwert interne Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|A5h<br />
|Max. Vorlauftemperatur<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A9h<br />
|Unbekannter Wert<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|AFh<br />
|Status Zirkulationspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B3h<br />
|Status Rücklaufregelung<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|C3h<br />
|Hyterese Solarpumpe<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|}<br />
<br />
====Andere Befehle====<br />
<br />
Nicht alle Befehle passen in das genannte Schema.<br />
<br />
=====07 02 00 00 00 04 C4=====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
07 02 00 00 00 04 C4<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04". Weiterhin hat das unbekannte Byte 2 den Wert "02h".<br />
<br />
===Anworten des Geräts===<br />
<br />
Das Gerät anwortet mit Nachrichten, die den oben angegebenen Aufbau haben. Dabei das unbekannte Byte 2 anzugeben, ob es sich um eine "normale" Antwort ("00h") oder um eine andere Antwort handelt.<br />
<br />
====Normale Antworten====<br />
<br />
Bei normalen Antworten hat Byte 2 den Wert "00h". Ab Byte 3 folgenden dann die angeforderten Daten. Hierbei werden verschiedene Kodierungen verwendet. Analogwerte werden in einem oder zwei Bytes kodiert, je nach Befehl werden ein oder zwei derart kodierte Analogwerte zurückgegeben. Für Statusmeldungen scheint es verschiedene Kodierungen zu geben, die jeweils ein Byte verwenden.<br />
<br />
====Andere Antworten====<br />
<br />
{|class=wikitable<br />
!Nachricht<br />
!Bedeutung<br />
|-<br />
|<tt>03 '''01''' 07</tt><br />
|Checksummenfehler?<br />
|-<br />
|<tt>03 '''03''' 05</tt><br />
|Nicht unterstützt, nicht vorhanden?<br />
|}<br />
<br />
<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C. Negative Werte werden in Zweikomplement-Darstellung übertragen.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
FF21h = -223d => -223/16 °C = -13,94 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
F0 = Inaktiv<br />
0F = Aktiv<br />
<br />
oder<br />
<br />
00 = Inktiv<br />
01 = Aktiv<br />
<br />
<br />
<br />
<br />
<br />
==Links==<br />
<br />
* http://www.hx7.net/vaillant/ - Daten auswerten, von hinten durch die Brust ins Auge ;-)</div>Malihttp://old.ethersex.de/index.php?title=Dallas_1-wire_Bus&diff=3444Dallas 1-wire Bus2010-01-09T14:34:31Z<p>Mali: /* Einbindung in Control6 */</p>
<hr />
<div>== Onewire interface ==<br />
<br />
Ethersex kann 1-wire Temperatursensoren mit [[ECMD]] auflisten und abfragen. Es wird eine reine Softwareimplementierung des Protokolls benutzt, was keine weiteren Hardware erfordert, als die Temperatursensoren selbst. Dabei muss beachtet werden, dass der Datapin des Buses in der Standardkonfiguration auf PD6 liegt (kann in der pinning/generic.m4 geändert werden)<br />
<br />
=== Onewire Hardware ===<br />
<br />
Folgende 1-wire Hardware wird momentan durch Ethersex unterstützt:<br />
* DS1820 (Temperatursensor)<br />
* DS18B20 (Temperatursensor)<br />
* DS1822 (Temperatursensor)<br />
* DS2502 (EEPROM)<br />
* [[DS2450]] (4 Kanal ADC)<br />
<br />
=== Onewire Befehle ===<br />
<br />
unter Linux als erstes netcat starten (hierbei natürlich die IP ggf modifizieren): <br />
netcat 192.168.0.15 2701<br />
danach am prompt:<br />
<br />
1w list<br />
Gibt eine Liste mit Hexcodes aller angeschlossenen und erkannten Onewire(tm) Sensoren aus.<br />
<br />
1w convert &lt;hexcode&gt;<br />
Veranlasst eine Temperaturmessung des addressierten Sensors, oder wenn das Argument &lt;hexcode&gt; weggelassen wird aller angeschlossener Sensoren.<br />
<br />
1w get &lt;hexcode&gt;<br />
Gibt die gemessene Temperatur eines Sensors aus.<br />
<br />
=== Einbindung in die [[HTTPD]]-Weboberfläche ===<br />
<br />
Unter httpd/embed/ow.ht.m4, bzw httpd/embed/Xow.ht.m4 liegt eine Weboberflaeche, die alle Sensoren erkennt und ihre aktuelle Temperatur regelmässig per Ajax abfragt und anzeigt. Im Falle von Xow.ht.m4 wird sogar Graph der Temperatur mittels SVG gemalt. Um die Dateien einzubinden, muss man einfach bei aktiviertem Onewiresupport den [[Webserver]] und das Datei Inlining aktivieren.<br />
<br />
Die Dateien können dann unter ow.ht bzw. unter Xow.ht angezeigt werden.<br />
<br />
[[Bild:onewire-svg.png]]<br />
<br />
=== Anschluss AVR-NET-IO ===<br />
Für das Pollin [[AVR-NET-IO]] Board können die Sensoren DS18S20+ , <br />
<br />
so im normal Modus angeschlossen werden:<br />
<br />
[[Bild:netio-1wire_normal.png]]<br />
<br />
<br />
<br />
so im parasitären Modus angeschlossen werden:<br />
<br />
[[Bild:netio-1wire.png]]<br />
<br />
=== Einbindung in [[Control6]] ===<br />
Die Sensoren können mit '''ONEWIRE_GET''' einfach abgefragt werden. Die Funktion führt automatisch ein ''convert'' aus, es sind also keine zwei Schritte erforderlich wie bei dem Zugriff über [[ECMD]]. Die Rückgabe erfolgt (analog der Funktion '''KTY_GET''') in Centigrad, also Temperatur * 10. Hier vielleicht ein kleines Beispiel, das die Daten in eine von außen abfragbare Variable übernimmt. Sicher kann man sinnvolleres damit anstellen :-)<br />
<br />
<pre>CONTROL_START<br />
<br />
ECMD_GLOBAL(Temperatur, 0);<br />
<br />
THREAD(read_temp)<br />
Temperatur = ONEWIRE_GET(10d85594010800eb);<br />
WAIT(10);<br />
THREAD_END(read_temp)<br />
<br />
ON STARTUP DO<br />
THREAD_START(read_temp);<br />
END<br />
<br />
CONTROL_END<br />
</pre><br />
<br />
=== Beispiele ===<br />
<br />
===== sh oder bash =====<br />
Einfaches SH (Linux Shell) Script von stesie (irc) zum Auslesen von einem Wert<br />
<br />
<source lang="bash"><br />
#! /bin/sh<br />
SENSORID=10529f7001080016<br />
#ESEXIP=2001:6f8:1209:23:42::17 #IPv6 Adresse<br />
ESEXIP=192.168.255.90<br />
<br />
#IPv6<br />
#echo 1w convert $SENSORID | nc6 -u $ESEXIP 2701 -q 1 2>/dev/null | grep -qe OK || exit 1 <br />
#echo 1w get $SENSORID | nc6 -u $ESEXIP 2701 -q 1 2>/dev/null | sed -e 's/Temperatur: //' <br />
<br />
#IPv4<br />
echo 1w convert $SENSORID | nc -u $ESEXIP 2701 -q 1 2>/dev/null | grep -qe OK || exit 1<br />
echo 1w get $SENSORID | nc -u $ESEXIP 2701 -q 1 2>/dev/null | sed -e 's/Temperatur: //'<br />
</source><br />
<br />
==== Perl ====<br />
Beispiel in Perl das alle Sensoren ermittelt und anschließend die Werte ausgibt.<br />
Benötigt wird das Modul NET das kein IPv6 kann<br />
<br />
<source lang="perl"><br />
#!/usr/bin/perl -w<br />
#Auslesen der 1 Wire Sensoren an einem AVR-NET-IO mit ethersex<br />
<br />
use strict;<br />
use Net::Telnet ();<br />
<br />
my $esexip="192.168.255.90";<br />
my $esexport="2701";<br />
my $esex;<br />
my @sensor;<br />
my $sensor;<br />
my $dummy;<br />
my $temp;<br />
<br />
$esex = Net::Telnet->new || die "kann Ethersex nicht finden";;<br />
$esex->open(Host => $esexip,<br />
Port => $esexport,<br />
Timeout => 2);<br />
<br />
#Alles Sensor-IDs auslesen und dem Array @sensor zuweisen<br />
$esex->print("1w list");<br />
($sensor) = $esex->waitfor(Timeout => 2,<br />
String => "OK");<br />
@sensor=split(/\s+/, $sensor);<br />
print "@sensor","\n"; #Kontrollausgabe<br />
<br />
my $zahler=@sensor;<br />
print "Anzahl der Elemente :",$zahler,"\n\n";<br />
<br />
#Alles Sensore Temperatur einlesen<br />
$esex->print("1w convert");<br />
$esex->waitfor(Timeout => 2,<br />
String => "OK");<br />
<br />
#Sensor ID inklusive Wert ausgeben<br />
foreach (@sensor) {<br />
$esex->print("1w get $_");<br />
<br />
($dummy,$temp)=$esex->waitfor(Match =>'/[-]?\d+\.\d+/',<br />
Timeout => 5);<br />
<br />
print "Temperatur vom ID ",$_,": ",$temp," C°","\n";<br />
}<br />
</source><br />
<br />
==== Python ====<br />
<br />
<source lang="python"><br />
#!/usr/bin/python<br />
<br />
from socket import *<br />
<br />
def connectEP():<br />
s = socket(AF_INET, SOCK_STREAM)<br />
s.settimeout(5)<br />
s.connect(("192.168.5.3", 2701))<br />
return s<br />
<br />
def getTemperature():<br />
s.send("1w list\n")<br />
sensors = []<br />
sensors_result = {}<br />
<br />
# list aller Sensoren<br />
while 1:<br />
response = s.recv(1024).rstrip("\n")<br />
if not response: break<br />
if response != "OK":<br />
sensors.append(response)<br />
else:<br />
break<br />
<br />
# wert konvertieren<br />
for sensor in sensors:<br />
s.send("1w convert " + sensor + "\n")<br />
while 1:<br />
response = s.recv(1024).rstrip("\n")<br />
if response == "OK":<br />
break <br />
<br />
# wert auslesen <br />
s.send("1w get " + sensor + "\n")<br />
response = s.recv(1024).rstrip("\n").lstrip()<br />
sensors_result[sensor] = response<br />
return(sensors_result)<br />
<br />
s = connectEP()<br />
for sensor, value in getTemperature().iteritems():<br />
print sensor + " " + value<br />
</source><br />
<br />
==== PHP ====<br />
<br />
<source lang="php"><br />
<br />
<html><br />
<br />
<head><br />
<title>ethersex php example</title><br />
</head><br />
<br />
<body><br />
<br />
<?php<br />
<br />
define(IP, '192.168.10.9'); // deine ethersex ip adresse<br />
define(PORT, 2701); // standart port im image<br />
<br />
request("1w convert");<br />
<br />
$response = request("1w list");<br />
$explode = explode("\n", $response);<br />
<br />
for ($i=0; $i < count($explode)-2; $i++) {<br />
echo "Sensor: " . trim($explode[$i]);<br />
echo " -- Wert: " . request("1w get " . $explode[$i]);<br />
echo "<br>\n";<br />
}<br />
<br />
function request($request) {<br />
$rs = fsockopen(IP, PORT);<br />
<br />
if (!$rs) {<br />
$response = "Kann Verbindung nicht aufbauen!";<br />
}<br />
else {<br />
$response ="";<br />
$request = "!" . $request . "\r\n";<br />
<br />
fputs($rs, $request);<br />
<br />
while (!feof($rs)) {<br />
$response .= fgets($rs, 128);<br />
}<br />
fclose($rs);<br />
}<br />
<br />
return $response;<br />
}<br />
<br />
?><br />
<br />
</body><br />
</source><br />
<br />
[[Category:Ethersex]]<br />
[[Category:StepByStep]]<br />
[[Category:Onewire]]</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3443Vaillant X6 Schnittstelle2010-01-09T13:43:01Z<p>Mali: </p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 06.01.10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldung Checksum-Fehler?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x03 Fehlermeldung?<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme<br />
<br />
===Prüfsumme===<br />
<br />
Zur Berechnung der Checksum werden die Bytes nacheinander XOR-verknüpft und das Zwischenergebnis dann jeweils um 1 bit nach links verschoben:<br />
<br />
sub checksum<br />
{<br />
my $string = $_[0];<br />
my $checksum; <br />
<br />
for (my $i = 0; $i < length($string); $i++)<br />
{<br />
if ($checksum & 0x80)<br />
{<br />
$checksum = ($checksum << 1 | 1) & 0xFF;<br />
# ???<br />
$checksum = $checksum ^ 0x18;<br />
}<br />
else<br />
{<br />
$checksum = $checksum << 1;<br />
}<br />
$checksum = $checksum ^ ord(substr($string, $i, 1));<br />
}<br />
return $checksum;<br />
}<br />
<br />
Den Quelltext darf gerne mal jemand in C konvertieren ;-) ...<br />
<br />
Beim Finden des Algorithmus waren kurze Nachrichten wie <tt>03 03 05</tt> und <tt>03 01 07</tt> nützlich. Es fiel dann aber auf, dass die Berechnung immer dann zu einem anderen Ergebnis führt, wenn das Zwischenergebnis im Verlauf der Berechnung größer als FFh (127) wird. In der Nachricht <tt>07 00 00 00 98 05 CC</tt> ist dies erst beim letzten Datenbyte der Fall. Von dort konnte man also zurückrechnen, was man am Zwischenergebnis ändern muss, um letztendlich auf die gleiche Prüfsumme zu kommen wie das Gerät. Diese Änderung ist genau ein XOR mit 18h. Siehe auch [http://coding.derkeiler.com/Archive/General/comp.arch.embedded/2008-06/msg00256.html] und [http://www.gamefaqs.com/console/nes/file/563408/47175].<br />
<br />
===Befehle===<br />
<br />
Die bekannten Befehlsnachrichten sind 7 Byte lang und haben einen einheitlichen Aufbau. Dem 1 Byte langen Befehl werden zwei Null-Bytes vorangestellt, dann folgt ein Byte, das die Länge der erwarteten Daten angibt:<br />
<br />
00 00 98 05<br />
<br />
Der resultierende String wird nach dem oben geschilderten Aufbau von Nachrichten verpackt. Dabei ist das noch unbekannte Byte 2 ebenfalls "00h". Es ergibt sich:<br />
<br />
07 00 '''00 00 98 05''' CC<br />
<br />
Was das Byte angeht, das die Datenlänge angibt, bin ich noch nicht ganz sicher. Mein Gerät scheint es nicht allzu ernst zu nehmen. Verändert man das entsprechende Byte in der Anfrage, sendet weiterhin die ursprüngliche Anzahl von Bytes und somit eine andere Zahl von Bytes als angefordert:<br />
<br />
07 00 00 00 98 '''03''' CA<br />
08 00 '''02 2A FD D5 00''' 37<br />
<br />
====Liste der Befehle====<br />
<br />
{|class=wikitable<br />
!Befehl<br />
!Funktion<br />
!Datenbytes<br />
!Typ<br />
|-<br />
|01h<br />
|Sollwert Brauchwassertemperatur<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|03h<br />
|Unbekannter Statuswert<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|04h<br />
|Sollwert Speicher<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|05h<br />
|Flammsignal<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|08h<br />
|Sommer/Winter-Schalter<br />
|1<br />
|Status (Sommer/Winter)<br />
|-<br />
|0Eh<br />
|Status Raumthermostat<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|17h<br />
|Speichertemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|18h<br />
|Vorlauftemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|1Fh<br />
|Anzahl GFA Störungen<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|20h<br />
|Anzahl STB Abschaltungen<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|24h<br />
|Drehzahlsollwert<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|25h<br />
|Sollwert Vorlauf Ext. Regler 7-8-9<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|38h<br />
|Verbleibende Brennersperrzeit<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|39h<br />
|Sollwert Vorlauftemperatur<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|3Fh<br />
|Status externe Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|42h<br />
|Stellung VUV<br />
|1<br />
|Status (?)<br />
|-<br />
|44h<br />
|Status interne Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|48h<br />
|Status Gasmagnetventil<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|49h<br />
|Status Zünder<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|53h<br />
|Status Unbekannt<br />
|1<br />
|Status (F0h/0Fh)<br />
|-<br />
|58h<br />
|Anforderung Warmwasser C1/C2<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|63h<br />
|Wasserpumpennachlaufzeit nach Speicherladung<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|65h<br />
|Korrekturwert Aussentemperatur<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|66h<br />
|Speicherladezeit<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Ah<br />
|Aussentemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|6Bh<br />
|Ext. Vor-/Rücklauftemperatur<br />
|3<br />
|Ein Analogwert (2 byte) + ein Sensorstatus<br />
|-<br />
|6Ch<br />
|Heizungsteillast<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|6Fh<br />
|Zähler 3 Zündversuche<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|71h<br />
|Status Speicherfreigabe Schaltuhr<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|83h<br />
|Drehzahlistwert<br />
|2<br />
|Ein Analogwert (2 byte)<br />
|-<br />
|98h<br />
|Rücklauftemperatur<br />
|5<br />
|Zwei Analogwerte (2 x 2 byte) + ein Sensorstatus<br />
|-<br />
|9Ah<br />
|Unbekannter Temperaturwert<br />
|5<br />
|Zwei Analogwerte (2 x 2 byte) + ein Sensorstatus<br />
|-<br />
|9Dh<br />
|Offset Warmstartsollwert<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|9Eh<br />
|Status Speicherladepumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|A1h<br />
|Sollwert interne Heizungspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|A5h<br />
|Max. Vorlauftemperatur<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|A9h<br />
|Unbekannter Wert<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|AFh<br />
|Status Zirkulationspumpe<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|B3h<br />
|Status Rücklaufregelung<br />
|1<br />
|Status (00h/01h)<br />
|-<br />
|C3h<br />
|Hyterese Solarpumpe<br />
|1<br />
|Ein Analogwert (1 byte)<br />
|-<br />
|}<br />
<br />
====Andere Befehle====<br />
<br />
Nicht alle Befehle passen in das genannte Schema.<br />
<br />
=====07 02 00 00 00 04 C4=====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
07 02 00 00 00 04 C4<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04". Weiterhin hat das unbekannte Byte 2 den Wert "02h".<br />
<br />
===Anworten des Geräts===<br />
<br />
Das Gerät anwortet mit Nachrichten, die den oben angegebenen Aufbau haben. Dabei das unbekannte Byte 2 anzugeben, ob es sich um eine "normale" Antwort ("00h") oder um eine andere Antwort handelt.<br />
<br />
====Normale Antworten====<br />
<br />
Bei normalen Antworten hat Byte 2 den Wert "00h". Ab Byte 3 folgenden dann die angeforderten Daten. Hierbei werden verschiedene Kodierungen verwendet. Analogwerte werden in einem oder zwei Bytes kodiert, je nach Befehl werden ein oder zwei derart kodierte Analogwerte zurückgegeben. Für Statusmeldungen scheint es verschiedene Kodierungen zu geben, die jeweils ein Byte verwenden.<br />
<br />
====Andere Antworten====<br />
<br />
{|class=wikitable<br />
!Nachricht<br />
!Bedeutung<br />
|-<br />
|<tt>03 '''01''' 07</tt><br />
|Checksummenfehler?<br />
|-<br />
|<tt>03 '''03''' 05</tt><br />
|Nicht unterstützt, nicht vorhanden?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C. Negative Werte werden in Zweikomplement-Darstellung übertragen.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
FF21h = -223d => -223/16 °C = -13,94 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
F0 = Inaktiv<br />
0F = Aktiv<br />
<br />
oder<br />
<br />
00 = Inktiv<br />
01 = Aktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3436Vaillant X6 Schnittstelle2010-01-06T19:51:13Z<p>Mali: </p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 06.01.10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme hat mich einige Zeit gekostet. Das Verfahren ist aber nicht wirklich schwierig:<br />
<br />
sub checksum<br />
{<br />
my $string = $_[0];<br />
my $checksum; <br />
<br />
for (my $i = 0; $i < length($string); $i++)<br />
{<br />
if ($checksum & 0x80)<br />
{<br />
$checksum = ($checksum << 1 | 1) & 0xFF;<br />
# ???<br />
$checksum = $checksum ^ 0x18;<br />
}<br />
else<br />
{<br />
$checksum = $checksum << 1;<br />
}<br />
$checksum = $checksum ^ ord(substr($string, $i, 1));<br />
}<br />
return $checksum;<br />
}<br />
<br />
Den Quelltext darf gerne mal jemand in C konvertieren ;-) ... Beim Finden des Algorithmus' waren kurze Nachrichten wie 03 03 05 und 03 01 07 nützlich. Es fiel dann aber auf, dass die Berechnung immer dann zu einem anderen Ergebnis führt, wenn die Zwischen-Prüfsumme im Verlauf der Berechnung größer als 127 wird. In der Nachricht 07 00 00 00 98 05 CC ist dies erst beim letzten Datenbyte der Fall. Von dort konnte man also zurückrechnen, was man an der Zwischen-Prüfsumme ändern muss, um letztendlich auf die gleiche Prüfsumme zu kommen wie das Gerät. Diese Änderung ist genau ein XOR mit 18h. Siehe auch [http://coding.derkeiler.com/Archive/General/comp.arch.embedded/2008-06/msg00256.html] und [http://www.gamefaqs.com/console/nes/file/563408/47175].<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
Es scheint, als gebe das letzte Byte des Befehls die Anzahl der zurückzuliefernden Datenbytes an. Ob man einen Wert wahlweise in 1-Byte- oder 2-Byte-Darstellung abfragen kann, lässt sich erst überprüfen, wenn die Prüfsumme verstanden ist.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04".<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Vermutlich wird dieser Sensor für einen Sicherheitsmechanismus verwendet: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
Fragt die Speichertemperatur ab (Bytes 3,4), das Statusbyte "AA" zeigt an, dass die Verbindung zu Sensor unterbrochen ist:<br />
<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Das Statusbyte "00" sagt "Kein Fehler".<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
Interne Heizungspumpe, Komischerweise scheint hier zu gelten 00=aus 01=an ...<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), evtl einen weiteren Temperaturwert (Bytes 5+6, hier -23,00) und ein Statusbyte, das "Kein Fehler" meldet:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
Welche Aussage kann das Statusbyte haben, -23,00°C scheint nicht wirklich ein gültiger Messwert zu sein.<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Zustandwert oder Analogwert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C. Negative Werte werden in Zweikomplement-Darstellung übertragen.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
FF21h = -223d => -223/16 °C = -13,94 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3430Vaillant X6 Schnittstelle2010-01-06T14:27:09Z<p>Mali: </p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 06.01.10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das letzte Byte der Nachricht scheint ein Gewicht von 1 zu haben. <br />
<br />
05 00 00 22 0A<br />
05 00 00 23 0B<br />
05 00 00 24 0C<br />
<br />
und<br />
<br />
04 00 00 10<br />
04 00 01 11<br />
04 00 F0 E0<br />
<br />
Die Bytes scheinen von hinten angefangen gewichtet zu werden.<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
Es scheint, als gebe das letzte Byte des Befehls die Anzahl der zurückzuliefernden Datenbytes an. Ob man einen Wert wahlweise in 1-Byte- oder 2-Byte-Darstellung abfragen kann, lässt sich erst überprüfen, wenn die Prüfsumme verstanden ist.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04".<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Vermutlich wird dieser Sensor für einen Sicherheitsmechanismus verwendet: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
Fragt die Speichertemperatur ab (Bytes 3,4), das Statusbyte "AA" zeigt an, dass die Verbindung zu Sensor unterbrochen ist:<br />
<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Das Statusbyte "00" sagt "Kein Fehler".<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
Interne Heizungspumpe, Komischerweise scheint hier zu gelten 00=aus 01=an ...<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), evtl einen weiteren Temperaturwert (Bytes 5+6, hier -23,00) und ein Statusbyte, das "Kein Fehler" meldet:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
Welche Aussage kann das Statusbyte haben, -23,00°C scheint nicht wirklich ein gültiger Messwert zu sein.<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Zustandwert oder Analogwert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C. Negative Werte werden in Zweikomplement-Darstellung übertragen.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
FF21h = -223d => -223/16 °C = -13,94 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3429Vaillant X6 Schnittstelle2010-01-06T12:43:40Z<p>Mali: /* 07 00 00 00 98 05 CC */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
Es scheint, als gebe das letzte Byte des Befehls die Anzahl der zurückzuliefernden Datenbytes an. Ob man einen Wert wahlweise in 1-Byte- oder 2-Byte-Darstellung abfragen kann, lässt sich erst überprüfen, wenn die Prüfsumme verstanden ist.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04".<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Vermutlich wird dieser Sensor für einen Sicherheitsmechanismus verwendet: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
Fragt die Speichertemperatur ab (Bytes 3,4), das Statusbyte "AA" zeigt an, dass die Verbindung zu Sensor unterbrochen ist:<br />
<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Das Statusbyte "00" sagt "Kein Fehler".<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), evtl einen weiteren Temperaturwert (Bytes 5+6, hier -23,00) und ein Statusbyte, das "Kein Fehler" meldet:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
Welche Aussage kann das Statusbyte haben, -23,00°C scheint nicht wirklich ein gültiger Messwert zu sein.<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Zustandwert oder Analogwert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C. Negative Werte werden in Zweikomplement-Darstellung übertragen.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
FF21h = -223d => -223/16 °C = -13,94 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3428Vaillant X6 Schnittstelle2010-01-06T12:42:21Z<p>Mali: /* 07 00 00 00 98 05 CC */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
Es scheint, als gebe das letzte Byte des Befehls die Anzahl der zurückzuliefernden Datenbytes an. Ob man einen Wert wahlweise in 1-Byte- oder 2-Byte-Darstellung abfragen kann, lässt sich erst überprüfen, wenn die Prüfsumme verstanden ist.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04".<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Vermutlich wird dieser Sensor für einen Sicherheitsmechanismus verwendet: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
Fragt die Speichertemperatur ab (Bytes 3,4), das Statusbyte "AA" zeigt an, dass die Verbindung zu Sensor unterbrochen ist:<br />
<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Das Statusbyte "00" sagt "Kein Fehler".<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), evtl einen weiteren Temperaturwert (Bytes 5+6, hier -23,00) und ein Statusbyte das "Kein Fehler" meldet:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Zustandwert oder Analogwert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C. Negative Werte werden in Zweikomplement-Darstellung übertragen.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
FF21h = -223d => -223/16 °C = -13,94 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3427Vaillant X6 Schnittstelle2010-01-06T12:41:07Z<p>Mali: /* 07 00 00 00 18 03 D3 */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
Es scheint, als gebe das letzte Byte des Befehls die Anzahl der zurückzuliefernden Datenbytes an. Ob man einen Wert wahlweise in 1-Byte- oder 2-Byte-Darstellung abfragen kann, lässt sich erst überprüfen, wenn die Prüfsumme verstanden ist.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04".<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Vermutlich wird dieser Sensor für einen Sicherheitsmechanismus verwendet: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
Fragt die Speichertemperatur ab (Bytes 3,4), das Statusbyte "AA" zeigt an, dass die Verbindung zu Sensor unterbrochen ist:<br />
<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Das Statusbyte "00" sagt "Kein Fehler".<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Zustandwert oder Analogwert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C. Negative Werte werden in Zweikomplement-Darstellung übertragen.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
FF21h = -223d => -223/16 °C = -13,94 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3426Vaillant X6 Schnittstelle2010-01-06T12:33:54Z<p>Mali: /* Temperaturen */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
Es scheint, als gebe das letzte Byte des Befehls die Anzahl der zurückzuliefernden Datenbytes an. Ob man einen Wert wahlweise in 1-Byte- oder 2-Byte-Darstellung abfragen kann, lässt sich erst überprüfen, wenn die Prüfsumme verstanden ist.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04".<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Vermutlich wird dieser Sensor für einen Sicherheitsmechanismus verwendet: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
Fragt die Speichertemperatur ab (Bytes 3,4), das Statusbyte "AA" zeigt an, dass die Verbindung zu Sensor unterbrochen ist:<br />
<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Bedeutung des zusätzlichen Bytes ist unbekannt:<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Zustandwert oder Analogwert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C. Negative Werte werden in Zweikomplement-Darstellung übertragen.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
FF21h = -223d => -223/16 °C = -13,94 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3425Vaillant X6 Schnittstelle2010-01-06T12:22:13Z<p>Mali: /* 07 00 00 00 17 03 CD */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
Es scheint, als gebe das letzte Byte des Befehls die Anzahl der zurückzuliefernden Datenbytes an. Ob man einen Wert wahlweise in 1-Byte- oder 2-Byte-Darstellung abfragen kann, lässt sich erst überprüfen, wenn die Prüfsumme verstanden ist.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04".<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Vermutlich wird dieser Sensor für einen Sicherheitsmechanismus verwendet: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
Fragt die Speichertemperatur ab (Bytes 3,4), das Statusbyte "AA" zeigt an, dass die Verbindung zu Sensor unterbrochen ist:<br />
<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Bedeutung des zusätzlichen Bytes ist unbekannt:<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Zustandwert oder Analogwert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3424Vaillant X6 Schnittstelle2010-01-06T12:13:23Z<p>Mali: /* Befehle */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
Es scheint, als gebe das letzte Byte des Befehls die Anzahl der zurückzuliefernden Datenbytes an. Ob man einen Wert wahlweise in 1-Byte- oder 2-Byte-Darstellung abfragen kann, lässt sich erst überprüfen, wenn die Prüfsumme verstanden ist.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
Bei diesem Befehl ist die Anzahl der zurückgelieferten Bytes nicht gleich dem als viertem Bytes gesendeten Wert "04".<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Vermutlich wird dieser Sensor für einen Sicherheitsmechanismus verwendet: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Bedeutung des zusätzlichen Bytes ist unbekannt:<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Zustandwert oder Analogwert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3423Vaillant X6 Schnittstelle2010-01-06T12:05:00Z<p>Mali: /* 07 00 00 00 05 01 EB */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Vermutlich wird dieser Sensor für einen Sicherheitsmechanismus verwendet: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Bedeutung des zusätzlichen Bytes ist unbekannt:<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Zustandwert oder Analogwert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3422Vaillant X6 Schnittstelle2010-01-06T12:03:44Z<p>Mali: /* Anworten des Geräts */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Bedeutung des zusätzlichen Bytes ist unbekannt:<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Zustandwert oder Analogwert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3421Vaillant X6 Schnittstelle2010-01-06T12:02:34Z<p>Mali: /* Kodierung von Werten */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Bedeutung des zusätzlichen Bytes ist unbekannt:<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Vermutlich ist das Format der zurückgelieferten Daten eindeutig mit dem anfordernden Befehl verbunden.<br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3420Vaillant X6 Schnittstelle2010-01-06T12:00:18Z<p>Mali: /* Temperaturen */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Bedeutung des zusätzlichen Bytes ist unbekannt:<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Es scheint zwei Möglichkeiten zu geben, Temperaturen zu kodieren. Sollwerte (Grenzwerte?) sind teilweise in einem Byte kodiert, während andere Sollwerte und Messwerte in zwei Bytes kodiert sind: Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
52h = 82d => 82 °C<br />
0230h = 560d => 560/16 °C = 35,00 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3419Vaillant X6 Schnittstelle2010-01-06T11:56:22Z<p>Mali: /* Statuswerte */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Bedeutung des zusätzlichen Bytes ist unbekannt:<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Sensorstatus====<br />
<br />
00 = kein Fehler<br />
55 = Kurzschluss<br />
AA = Unterbrechung<br />
<br />
====Schaltzustand====<br />
<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3418Vaillant X6 Schnittstelle2010-01-06T11:52:43Z<p>Mali: </p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
Solange es kein spezielles Modul für das Ethersex-System gibt, kann [[YPort]] verwendet werden. Das Heizgerät kann dann von eigener Software aus oder mit Hilfe eines gemappten COM-Ports auch von vrDIALOG aus angesprochen werden.<br />
<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Bedeutung des zusätzlichen Bytes ist unbekannt:<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Statuswerte====<br />
<br />
00 = kein Fehler<br />
AA = ?<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=YPort&diff=3417YPort2010-01-06T11:49:56Z<p>Mali: /* Virtuellen COM-Port auf YPort mappen (Windows) */</p>
<hr />
<div>== Yport ( Ethernet - RS232 Konverter ) ==<br />
<br />
YPORT (aka XPORT) ist ein Ethernet - RS232 Konverter den man mit der default Portnummer 7970 ansprechen kann.<br />
<br />
* Die Portnummer kann mit "menuconfig" auch geändert werden.<br />
* Die Baudrate kann man auch in "menuconfig" einstellen.<br />
<br />
Aufruf:<br />
nc ipnummer-ethersex 7970<br />
Damit bekommt dann ein Gerät mit den RS232 an ein Terminal.<br />
<br />
Wenn es unerwünschte echo's gibt im Terminal, dann kann man die Verbindung so herstellen:<br />
stty -icanon -echo && nc ipnummer-ethersex 7970<br />
<br />
Wenn die verbindung getrennt wird, muss man "Blind" den Befehl "reset" eingeben und das Terminal ist wieder in normalem modus.<br />
Alternativ kann man auch <br />
stty -icanon -echo; nc ipnummer 7970; stty icanon echo<br />
eingeben, dann sollte das Echo gleich wieder aktiviert sein und in den Cooked-Mode schalten<br />
<br />
== Virtuelle Schnittstelle auf YPort mappen (Linux)==<br />
socat PTY,link=/dev/YPort TCP:192.168.1.5:7970<br />
<br />
... sorgt dafür, dass die serielle Schnittstelle am Ethersex als /dev/YPort im Linux-System erscheint.<br />
<br />
<br />
== Virtuellen COM-Port auf YPort mappen (Windows)==<br />
<br />
Unter Windows ist es möglich, einen COM-Port zu simulieren. Hierzu kann zB. das kostenlose Programm [http://www.hw-group.com/products/hw_vsp/index_en.html HW Virtual Serial Port] von [http://www.hw-group.com HW Group] verwendet werden. Dort einfach IP-Adresse und Port (Standard 7970) eingeben, die Option "External NVT Commands Port" ausschalten und auf "Create COM" klicken.<br />
<br />
== RS232 Kabel ==<br />
<br />
Zwei rs232 Geraete verbinden lasst sich einfach anhoeren, aber die verkabelung ist manchmal ein Problem.<br />
<br />
Es gibt zwei arten von RS232 Stecker DTE und DCE ("Data Terminal Equipment" und "Data Communications Equipment")<br />
http://www.bb-elec.com/bb-elec/literature/tech/faq_rs232_connections_work.pdf<br />
Daumenregel DTE: Computer, DCE: Modem.<br />
Das Pollin NET AVR ist zum Beispiel als DCE verkabelt (vgl. S.7. http://www.pollin.de/shop/downloads/D810058B.PDF : TxD an SUB-D9 pin 2 und RxD an pin 3)<br />
<br />
[[Category:Ethersex]]</div>Malihttp://old.ethersex.de/index.php?title=YPort&diff=3416YPort2010-01-06T11:48:40Z<p>Mali: /* YPort auf virtuelle Schnittstelle mappen */</p>
<hr />
<div>== Yport ( Ethernet - RS232 Konverter ) ==<br />
<br />
YPORT (aka XPORT) ist ein Ethernet - RS232 Konverter den man mit der default Portnummer 7970 ansprechen kann.<br />
<br />
* Die Portnummer kann mit "menuconfig" auch geändert werden.<br />
* Die Baudrate kann man auch in "menuconfig" einstellen.<br />
<br />
Aufruf:<br />
nc ipnummer-ethersex 7970<br />
Damit bekommt dann ein Gerät mit den RS232 an ein Terminal.<br />
<br />
Wenn es unerwünschte echo's gibt im Terminal, dann kann man die Verbindung so herstellen:<br />
stty -icanon -echo && nc ipnummer-ethersex 7970<br />
<br />
Wenn die verbindung getrennt wird, muss man "Blind" den Befehl "reset" eingeben und das Terminal ist wieder in normalem modus.<br />
Alternativ kann man auch <br />
stty -icanon -echo; nc ipnummer 7970; stty icanon echo<br />
eingeben, dann sollte das Echo gleich wieder aktiviert sein und in den Cooked-Mode schalten<br />
<br />
== Virtuelle Schnittstelle auf YPort mappen (Linux)==<br />
socat PTY,link=/dev/YPort TCP:192.168.1.5:7970<br />
<br />
... sorgt dafür, dass die serielle Schnittstelle am Ethersex als /dev/YPort im Linux-System erscheint.<br />
<br />
<br />
== Virtuellen COM-Port auf YPort mappen (Windows)==<br />
<br />
Unter Windows ist es möglich, einen COM-Port zu simulieren. Hierzu kann zB. das kostenlose Programm "[http://www.hw-group.com/products/hw_vsp/index_en.html HW Virtual Serial Port]" verwendet werden. Dort einfach IP-Adresse und Port (Standard 7970) eingeben, die Option "External NVT Commands Port" ausschalten und auf "Create COM" klicken.<br />
<br />
== RS232 Kabel ==<br />
<br />
Zwei rs232 Geraete verbinden lasst sich einfach anhoeren, aber die verkabelung ist manchmal ein Problem.<br />
<br />
Es gibt zwei arten von RS232 Stecker DTE und DCE ("Data Terminal Equipment" und "Data Communications Equipment")<br />
http://www.bb-elec.com/bb-elec/literature/tech/faq_rs232_connections_work.pdf<br />
Daumenregel DTE: Computer, DCE: Modem.<br />
Das Pollin NET AVR ist zum Beispiel als DCE verkabelt (vgl. S.7. http://www.pollin.de/shop/downloads/D810058B.PDF : TxD an SUB-D9 pin 2 und RxD an pin 3)<br />
<br />
[[Category:Ethersex]]</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3415Vaillant X6 Schnittstelle2010-01-06T10:54:06Z<p>Mali: /* Anworten des Geräts */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Bedeutung des zusätzlichen Bytes ist unbekannt:<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert (Sollwert?), zB. Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert (Istwert?) und Status des Sensors.<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Statuswerte====<br />
<br />
00 = kein Fehler<br />
AA = ?<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3414Vaillant X6 Schnittstelle2010-01-06T10:52:23Z<p>Mali: /* Wahrheitswerte */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Bedeutung des zusätzlichen Bytes ist unbekannt:<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Statuswerte====<br />
<br />
00 = kein Fehler<br />
AA = ?<br />
0F = Aktiv<br />
F0 = Inaktiv</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3413Vaillant X6 Schnittstelle2010-01-06T10:41:12Z<p>Mali: /* 07 00 00 00 18 03 D3 */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
<br />
Fragt Vorlauftemperatur ab (hier: 22.375°C). Bedeutung des zusätzlichen Bytes ist unbekannt:<br />
<br />
06 00 '''01 66 00''' A8<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
00 = ?<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3412Vaillant X6 Schnittstelle2010-01-06T10:39:31Z<p>Mali: /* Wahrheitswerte */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
00 = ?<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3411Vaillant X6 Schnittstelle2010-01-06T10:39:17Z<p>Mali: /* 07 00 00 00 44 01 69 */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3410Vaillant X6 Schnittstelle2010-01-06T10:38:58Z<p>Mali: /* 07 00 00 00 39 02 90 */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
<br />
Fragt Sollwert Vorlauftemperatur ab (hier: 1.6875°C), scheint hier - wegen über Klemmen 7-8-9 angeschlossenem Raumthermostat - nur zwischen 0 und Max zu springen, der Sprung wird durch ein Tiefpassfilter stark geglättet:<br />
<br />
05 00 '''00 1B''' 33<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3409Vaillant X6 Schnittstelle2010-01-06T10:34:57Z<p>Mali: /* 07 00 00 00 58 01 51 */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
Empfangen: 05 00 00 1B 33<br />
39: Vorlauftemperatur Sollwert: 1.6875°C<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 '''00 00''' 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3408Vaillant X6 Schnittstelle2010-01-06T10:34:38Z<p>Mali: /* 07 00 00 00 48 01 71 */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
Empfangen: 05 00 00 1B 33<br />
39: Vorlauftemperatur Sollwert: 1.6875°C<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3407Vaillant X6 Schnittstelle2010-01-06T10:34:23Z<p>Mali: /* 07 00 00 00 42 01 65 */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
Empfangen: 05 00 00 1B 33<br />
39: Vorlauftemperatur Sollwert: 1.6875°C<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 '''00''' 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3406Vaillant X6 Schnittstelle2010-01-06T10:34:06Z<p>Mali: /* 07 00 00 00 06 0E EA */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt<br />
<br />
12 00 '''00 00 00 00 00 00 00 00 00 00 00 00 00 00 00''' 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
Empfangen: 05 00 00 1B 33<br />
39: Vorlauftemperatur Sollwert: 1.6875°C<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3405Vaillant X6 Schnittstelle2010-01-06T10:33:38Z<p>Mali: /* 07 00 00 00 18 03 D3 */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt, evtl. Inhalt des Fehlerspeichers?<br />
<br />
12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
<br />
====07 00 00 00 26 0A A6====<br />
<br />
Evtl Fehlerspeicher?<br />
<br />
0D 00 '''64 64 64 64 64 64 64 64 64 64''' A2<br />
<br />
====07 00 00 00 39 02 90====<br />
Empfangen: 05 00 00 1B 33<br />
39: Vorlauftemperatur Sollwert: 1.6875°C<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3404Vaillant X6 Schnittstelle2010-01-06T10:31:06Z<p>Mali: /* 07 00 00 00 05 01 EB */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 06 0E EA====<br />
<br />
Unbekannt, evtl. Inhalt des Fehlerspeichers?<br />
<br />
12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4A<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
====07 00 00 00 39 02 90====<br />
Empfangen: 05 00 00 1B 33<br />
39: Vorlauftemperatur Sollwert: 1.6875°C<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3403Vaillant X6 Schnittstelle2010-01-06T10:24:38Z<p>Mali: /* 07 02 00 00 00 04 C4 */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDIALOG als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
====07 00 00 00 39 02 90====<br />
Empfangen: 05 00 00 1B 33<br />
39: Vorlauftemperatur Sollwert: 1.6875°C<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3402Vaillant X6 Schnittstelle2010-01-06T10:24:01Z<p>Mali: /* Anworten des Geräts */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDialog als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
====07 00 00 00 39 02 90====<br />
Empfangen: 05 00 00 1B 33<br />
39: Vorlauftemperatur Sollwert: 1.6875°C<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung, Analogwert und weitere Bytes?<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3401Vaillant X6 Schnittstelle2010-01-06T10:23:02Z<p>Mali: /* 07 00 00 00 98 05 CC */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDialog als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
====07 00 00 00 39 02 90====<br />
Empfangen: 05 00 00 1B 33<br />
39: Vorlauftemperatur Sollwert: 1.6875°C<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4, hier: 23.25°C), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3400Vaillant X6 Schnittstelle2010-01-06T10:22:30Z<p>Mali: /* 07 00 00 00 05 01 EB */</p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDialog als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
====07 00 00 00 17 03 CD====<br />
<br />
?<br />
06 00 '''FF 21 AA''' 5F<br />
<br />
<br />
====07 00 00 00 18 03 D3====<br />
Empfangen: 06 00 01 66 00 A8<br />
18: Vorlauftemperatur: 22.375°C<br />
<br />
====07 00 00 00 39 02 90====<br />
Empfangen: 05 00 00 1B 33<br />
39: Vorlauftemperatur Sollwert: 1.6875°C<br />
<br />
====07 00 00 00 42 01 65====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 44 01 69====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 48 01 71====<br />
<br />
Fragt Status Gasmagnetventil ab (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 49 01 73====<br />
<br />
Fragt Status Zünder ab, wird jeweils nur kurz aktiv beim Einschalten des Gasmagnetventils (hier: nicht aktiv):<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 53 01 47====<br />
<br />
Fragt irgendeinen Status ab:<br />
<br />
04 00 '''F0''' E0<br />
<br />
<br />
====07 00 00 00 55 02 48====<br />
<br />
Irgendein Analogwert?<br />
<br />
05 00 '''00 02''' 2A<br />
<br />
====07 00 00 00 58 01 51====<br />
<br />
?<br />
<br />
04 00 00 10<br />
<br />
====07 00 00 00 98 05 CC====<br />
<br />
Liefert unter anderem die Rücklauftemperatur (Bytes 3+4), aber zusätzlich drei weitere, unbekannte Bytes:<br />
<br />
08 00 '''01 74 FE 8B 00''' 75<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Malihttp://old.ethersex.de/index.php?title=Vaillant_X6_Schnittstelle&diff=3398Vaillant X6 Schnittstelle2010-01-06T10:01:32Z<p>Mali: </p>
<hr />
<div>Auf der mit X6 beschrifteten Buchse liegt ein RS232-Signal mit TTL-Pegeln an. Die Geräte kommunizieren mit 9600 Baud (8N1, keine Flusskontrolle). Normalerweise wird über diese Buchse ein PC angeschlossen, auf dem das Programm vrDIALOG ausgeführt wird, oder ein Kommunikationsmodul für das vrNetDIALOG-System.<br />
<br />
Eine Beta-Version des Programms vrDIALOG findet man mit [http://www.google.de/#q=vrDIALOG+site%3Awww.vaillant.pl Google] (Stand 01/10). Die Kommunikation des Programms mit dem Heizgerät lässt sich mit entsprechenden Tools beobachten.<br />
<br />
==Belegung==<br />
<br />
+---------+<br />
6 --- |<br />
GND 5 --- +--+<br />
TXD 4 --- |<br />
RXD 3 --- |<br />
2 --- +--+<br />
1 --- |<br />
+---------+<br />
<br />
Blick auf die Buchse (!)<br />
<br />
==Protokoll==<br />
<br />
Die Kommunikation scheint immer vom angeschlossenen PC (oder Ethersex?) auszugehen. Die Nachrichten in beide Richtungen haben ein ähnliches Format:<br />
<br />
Es gibt kein Zeilenende wie CR oder CR+LF. <br />
<br />
===Aufbau der Nachrichten===<br />
<br />
Alle Nachrichten haben ein gemeinsames Format:<br />
<br />
Bytes<br />
1 2 3 ... n-1 n<br />
+-----+-----+---- ---+-----+<br />
| Len | ? | Data | Chk |<br />
+-----+-----+---- ---+-----+<br />
<br />
Byte 1 Gesamtlänge der Nachricht ("n" Bytes, Längenbyte, Nachrichtentyp und Prüfsumme<br />
sind dabei mitgezählt)<br />
<br />
Byte 2 Evtl. sowas wie ein Nachrichtentyp oder eine Zieladresse:<br />
0x00 Normale Nachrichten<br />
0x01 Fehlermeldungen?<br />
0x02 ? - Verwendet bei der Abfrage der Version des Heizgeräts<br />
0x0a ? - Verwendet bei der Abfrage der Version des Reglers<br />
<br />
Byte 3 Daten, beinhalten die eigentliche Anforderung an das Gerät, die angeforderten<br />
.. n-1 Werte, oder sonstige Informationen.<br />
<br />
Byte n Prüfsumme, siehe weiter unten<br />
<br />
===Prüfsumme===<br />
<br />
Die Berechnung der Prüfsumme ist mir noch nicht klar. Es scheint kein CRC zu sein, sondern eher einen Prüfsumme, die mit unterschiedlichen Gewichten arbeitet.<br />
<br />
* Die gleiche Nachricht hat immer die gleiche Prüfsumme<br />
* Das vierte Byte der Nachricht scheint ein Gewicht von 1 zu haben:<br />
<br />
0x05 0x00 0x00 0x22 0x0A<br />
0x05 0x00 0x00 0x23 0x0B<br />
0x05 0x00 0x00 0x24 0x0C<br />
<br />
===Befehle===<br />
<br />
Alle bisher bekannten Befehlsnachrichten sind 7 Byte lang, Nach Abzug des Headers und der Prüfsumme bleiben demnach 4 Bytes für den eigentlichen Befehl.<br />
<br />
====07 02 00 00 00 04 C4====<br />
<br />
Fragt nach angeschlossenen Geräten? In meinem Fall meldet das Gerät anscheinend seine Versionsnummer, die von vrDialog als "0153_07.00" angezeigt wird:<br />
<br />
08 00 00 99 07 00 14 96<br />
<br />
====07 00 00 00 01 02 E0====<br />
<br />
Fragt Sollwert Brauchwassertemperatur ab. Der Temperaturwert ist in den Bytes 3 und 4 wie unten beschrieben kodiert (hier: 35°C):<br />
<br />
05 00 '''02 30''' 1C<br />
<br />
====07 00 00 00 03 01 E7====<br />
<br />
Unbekannter Statuswert.<br />
<br />
04 00 '''F0''' E0<br />
<br />
====07 00 00 00 04 02 EA====<br />
<br />
Fragt Sollwert Speichertemperatur ab (hier: 15°C, ausgeschaltet):<br />
<br />
05 00 '''00 F0''' D8<br />
<br />
====07 00 00 00 05 01 EB====<br />
Fragt Status des Flammsignals ab (hier: aus):<br />
<br />
04 00 '''F0''' E0<br />
<br />
Der Sensor erkennt, ob der Brenner brennt. Dadurch lässt sich ein Sicherheitsmechanismus schaffen: Wenn das Gasventil geöffnet ist und der Zünder gezündet hat, sollte innerhalb bestimmter Zeit die Flamme da sein, sonst strömt Gas aus.<br />
<br />
<br />
===Anworten des Geräts===<br />
<br />
{|class=wikitable<br />
!Nachrichtenlänge<br />
!Datenlänge<br />
!Inhalt<br />
|-<br />
|3<br />
|0<br />
|Nachricht enthält keine Daten, Fehlermeldung<br />
|-<br />
|4<br />
|1<br />
|Statusanzeige, Wahrheitswert<br />
|-<br />
|5<br />
|2<br />
|Analogwert, Temperatur<br />
|-<br />
|6<br />
|3<br />
|Analogwert und ein weiteres, unbekanntes Byte<br />
|-<br />
|7<br />
|4<br />
|Zwei Analogwerte<br />
|-<br />
|8<br />
|5<br />
|Versionsmeldung<br />
|-<br />
|10<br />
|7<br />
|?<br />
|-<br />
|18<br />
|15<br />
|?<br />
|}<br />
<br />
<br />
<br />
===Kodierung von Werten===<br />
<br />
In den Antworten des Heizgeräts sind verschiedene Informationen kodiert. Bisher sind zwei Typen von Werten bekannt, vermutlich gibt es weitere. <br />
<br />
====Temperaturen====<br />
<br />
Temperaturen scheinen immer auf gleiche Weise kodiert zu sein. Das zuerst gesendete Byte ist das höherwertige Byte. Der erhaltene Zahlenwert entspricht der Temperatur in 1/16°C.<br />
<br />
Beispiel<br />
<br />
0230h = 560d => 560/16 °C = 35 °C<br />
<br />
====Wahrheitswerte====<br />
<br />
0F = An<br />
F0 = Aus</div>Mali