Forum: Mikrocontroller und Digitale Elektronik eBus CRC Berechnung nachvollziehen


von Martin H. (martinhaller)


Angehängte Dateien:

Lesenswert?

Hallo,

seit ein paar Tagen versuche ich, die CRC in den auf unserem 
Heizungs-eBus mitgesnifften Messages nachzuvollziehen. Lt. Spec wird ein 
CRC8 ueber alle (expandierten) Bytes mit folgendem Generator-Polynom 
berechnet und ggfls expandiert an die Message angehaengt:

  x^8 + x^7 + x^4 + x^3 + x + 1

Daraus ergibt sich das Pattern 0xd9 (stimmt das?). Leider laufen auf dem 
Bus andere CRCs, als ich damit berechnet habe.

Ein paar mitgesniffte Beispiel-Botschaften:

1. 0x10 0x03 0x08 0x00 0x08 0x00 0x05 0x00 0x13 0x80 0x40 0x00 0x0a 0x71
2. 0x03 0xf1 0x08 0x00 0x08 0x00 0x14 0x00 0x13 0x80 0x00 0x00 0x0f 0xc7
3. 0x10 0x03 0x05 0x07 0x09 0x00 0x01 0x50 0x00 0x01 0x00 0xff 0x14 0xff 
0xa6
4. 0xf1 0xfe 0x05 0x03 0x08 0x01 0x00 0x40 0xff 0x30 0xff 0x00 0x13 0xd8
5. 0x03 0xfe 0x05 0x03 0x08 0x01 0x00 0x00 0x00 0x30 0x17 0x33 0x13 0x82

Das ACK Byte und das SYN Byte habe ich der Uebersichtlichkeit halber
weggelassen (sofern ein Frame nicht an die Broadcast-Adresse 0xfe geht 
und
damit gar kein ACK hat). Da diverse Frames ein (positives) ACK Byte 
haben,
bedeutet das, dass das Frame keine Bitfehler hat, also der Mitschnitt
korrekt sein muesste.

Ich habe im Netz einen CRC Algorithmus ausgegraben und in ein 
Testprogramm
verpackt. Wenn ich nun mit diesem Programm (siehe Anhang) die CRC 
berechne,
so stimmen die CRCs nie ueberein:

1. sollte sein: 0x71, berechnet: 0x84
2. sollte sein: 0xc7, berechnet: 0xa2
3. sollte sein: 0xa6, berechnet: 0xa3
4. sollte sein: 0xd8, berechnet: 0xff
5. sollte sein: 0x82, berechnet: 0xb1

Mein erster Gedanke war: das Generator-Polynom Pattern ist falsch 
berechnet. Dazu habe ich in einer Schleife fuer alle Pattern von 0x00 
bis 0xff die CRC berechnet und die Pattern ausgeben lassen, welche zu 
der Soll-CRC gepasst haben. Das habe ich mit meheren Frames gemacht und 
versucht, durch Korrelation das "richtige" Pattern zu finden. Leider war 
das statistisch praechtig verteilt; alle Pattern kamen nur 2x vor :-(

Die naechste Idee war: der Startwert der CRC ist nicht 0. Also habe ich
noch die 0xff (die man wohl manchmal verwendet) getestet, aber auch das
passt nicht.

Also bleibt nur noch ein Fehler im Algorithmus...

Hat jemand eine Idee?

Vielen Dank,
Gruss Martin

von Michael W. (mictronics) Benutzerseite


Lesenswert?

Das Polynom sollte 0x9B sein wenn ich nicht irre.

von Michael W. (mictronics) Benutzerseite


Lesenswert?

Wenn ich mir die verfügbare Dokumentation im Inet anschaue dann müsste 
die CRC als 11. Byte kommen. Bei deinen obigen Messages kommt die CRC 
aber als 14.Byte, bist Du dir sicher das deine Logs stimmen?

von Michael W. (mictronics) Benutzerseite


Lesenswert?

Ah, mein Fehler, variable Länge der Datenbytes.

von Martin H. (martinhaller)


Lesenswert?

Hallo Michael,

leider passen die CRCs bei 0x9b auch nicht....

von Michael W. (mictronics) Benutzerseite


Lesenswert?

Ja muste ich leider auch feststellen.
Eine gute Seite zum schnellen online berechnen von CRC's gibts übrigens 
hier:
http://www.zorc.breitbandkatze.de/crc.html

von Markus CRC (Gast)


Lesenswert?

Möglichkeit 1 (am besten kopieren und dann anschauen):

const unsigned char CRC_Tab8Value[256] = {
   (unsigned char) 0x00, (unsigned char) 0x9B, (unsigned char) 0xAD, 
(unsigned char) 0x36, (unsigned char) 0xC1, (unsigned char) 0x5A, 
(unsigned char) 0x6C, (unsigned char) 0xF7,
   (unsigned char) 0x19, (unsigned char) 0x82, (unsigned char) 0xB4, 
(unsigned char) 0x2F, (unsigned char) 0xD8, (unsigned char) 0x43, 
(unsigned char) 0x75, (unsigned char) 0xEE,
   (unsigned char) 0x32, (unsigned char) 0xA9, (unsigned char) 0x9F, 
(unsigned char) 0x04, (unsigned char) 0xF3, (unsigned char) 0x68, 
(unsigned char) 0x5E, (unsigned char) 0xC5,
   (unsigned char) 0x2B, (unsigned char) 0xB0, (unsigned char) 0x86, 
(unsigned char) 0x1D, (unsigned char) 0xEA, (unsigned char) 0x71, 
(unsigned char) 0x47, (unsigned char) 0xDC,
   (unsigned char) 0x64, (unsigned char) 0xFF, (unsigned char) 0xC9, 
(unsigned char) 0x52, (unsigned char) 0xA5, (unsigned char) 0x3E, 
(unsigned char) 0x08, (unsigned char) 0x93,
   (unsigned char) 0x7D, (unsigned char) 0xE6, (unsigned char) 0xD0, 
(unsigned char) 0x4B, (unsigned char) 0xBC, (unsigned char) 0x27, 
(unsigned char) 0x11, (unsigned char) 0x8A,
   (unsigned char) 0x56, (unsigned char) 0xCD, (unsigned char) 0xFB, 
(unsigned char) 0x60, (unsigned char) 0x97, (unsigned char) 0x0C, 
(unsigned char) 0x3A, (unsigned char) 0xA1,
   (unsigned char) 0x4F, (unsigned char) 0xD4, (unsigned char) 0xE2, 
(unsigned char) 0x79, (unsigned char) 0x8E, (unsigned char) 0x15, 
(unsigned char) 0x23, (unsigned char) 0xB8,
   (unsigned char) 0xC8, (unsigned char) 0x53, (unsigned char) 0x65, 
(unsigned char) 0xFE, (unsigned char) 0x09, (unsigned char) 0x92, 
(unsigned char) 0xA4, (unsigned char) 0x3F,
   (unsigned char) 0xD1, (unsigned char) 0x4A, (unsigned char) 0x7C, 
(unsigned char) 0xE7, (unsigned char) 0x10, (unsigned char) 0x8B, 
(unsigned char) 0xBD, (unsigned char) 0x26,
   (unsigned char) 0xFA, (unsigned char) 0x61, (unsigned char) 0x57, 
(unsigned char) 0xCC, (unsigned char) 0x3B, (unsigned char) 0xA0, 
(unsigned char) 0x96, (unsigned char) 0x0D,
   (unsigned char) 0xE3, (unsigned char) 0x78, (unsigned char) 0x4E, 
(unsigned char) 0xD5, (unsigned char) 0x22, (unsigned char) 0xB9, 
(unsigned char) 0x8F, (unsigned char) 0x14,
   (unsigned char) 0xAC, (unsigned char) 0x37, (unsigned char) 0x01, 
(unsigned char) 0x9A, (unsigned char) 0x6D, (unsigned char) 0xF6, 
(unsigned char) 0xC0, (unsigned char) 0x5B,
   (unsigned char) 0xB5, (unsigned char) 0x2E, (unsigned char) 0x18, 
(unsigned char) 0x83, (unsigned char) 0x74, (unsigned char) 0xEF, 
(unsigned char) 0xD9, (unsigned char) 0x42,
   (unsigned char) 0x9E, (unsigned char) 0x05, (unsigned char) 0x33, 
(unsigned char) 0xA8, (unsigned char) 0x5F, (unsigned char) 0xC4, 
(unsigned char) 0xF2, (unsigned char) 0x69,
   (unsigned char) 0x87, (unsigned char) 0x1C, (unsigned char) 0x2A, 
(unsigned char) 0xB1, (unsigned char) 0x46, (unsigned char) 0xDD, 
(unsigned char) 0xEB, (unsigned char) 0x70,
   (unsigned char) 0x0B, (unsigned char) 0x90, (unsigned char) 0xA6, 
(unsigned char) 0x3D, (unsigned char) 0xCA, (unsigned char) 0x51, 
(unsigned char) 0x67, (unsigned char) 0xFC,
   (unsigned char) 0x12, (unsigned char) 0x89, (unsigned char) 0xBF, 
(unsigned char) 0x24, (unsigned char) 0xD3, (unsigned char) 0x48, 
(unsigned char) 0x7E, (unsigned char) 0xE5,
   (unsigned char) 0x39, (unsigned char) 0xA2, (unsigned char) 0x94, 
(unsigned char) 0x0F, (unsigned char) 0xF8, (unsigned char) 0x63, 
(unsigned char) 0x55, (unsigned char) 0xCE,
   (unsigned char) 0x20, (unsigned char) 0xBB, (unsigned char) 0x8D, 
(unsigned char) 0x16, (unsigned char) 0xE1, (unsigned char) 0x7A, 
(unsigned char) 0x4C, (unsigned char) 0xD7,
   (unsigned char) 0x6F, (unsigned char) 0xF4, (unsigned char) 0xC2, 
(unsigned char) 0x59, (unsigned char) 0xAE, (unsigned char) 0x35, 
(unsigned char) 0x03, (unsigned char) 0x98,
   (unsigned char) 0x76, (unsigned char) 0xED, (unsigned char) 0xDB, 
(unsigned char) 0x40, (unsigned char) 0xB7, (unsigned char) 0x2C, 
(unsigned char) 0x1A, (unsigned char) 0x81,
   (unsigned char) 0x5D, (unsigned char) 0xC6, (unsigned char) 0xF0, 
(unsigned char) 0x6B, (unsigned char) 0x9C, (unsigned char) 0x07, 
(unsigned char) 0x31, (unsigned char) 0xAA,
   (unsigned char) 0x44, (unsigned char) 0xDF, (unsigned char) 0xE9, 
(unsigned char) 0x72, (unsigned char) 0x85, (unsigned char) 0x1E, 
(unsigned char) 0x28, (unsigned char) 0xB3,
   (unsigned char) 0xC3, (unsigned char) 0x58, (unsigned char) 0x6E, 
(unsigned char) 0xF5, (unsigned char) 0x02, (unsigned char) 0x99, 
(unsigned char) 0xAF, (unsigned char) 0x34,
   (unsigned char) 0xDA, (unsigned char) 0x41, (unsigned char) 0x77, 
(unsigned char) 0xEC, (unsigned char) 0x1B, (unsigned char) 0x80, 
(unsigned char) 0xB6, (unsigned char) 0x2D,
   (unsigned char) 0xF1, (unsigned char) 0x6A, (unsigned char) 0x5C, 
(unsigned char) 0xC7, (unsigned char) 0x30, (unsigned char) 0xAB, 
(unsigned char) 0x9D, (unsigned char) 0x06,
   (unsigned char) 0xE8, (unsigned char) 0x73, (unsigned char) 0x45, 
(unsigned char) 0xDE, (unsigned char) 0x29, (unsigned char) 0xB2, 
(unsigned char) 0x84, (unsigned char) 0x1F,
   (unsigned char) 0xA7, (unsigned char) 0x3C, (unsigned char) 0x0A, 
(unsigned char) 0x91, (unsigned char) 0x66, (unsigned char) 0xFD, 
(unsigned char) 0xCB, (unsigned char) 0x50,
   (unsigned char) 0xBE, (unsigned char) 0x25, (unsigned char) 0x13, 
(unsigned char) 0x88, (unsigned char) 0x7F, (unsigned char) 0xE4, 
(unsigned char) 0xD2, (unsigned char) 0x49,
   (unsigned char) 0x95, (unsigned char) 0x0E, (unsigned char) 0x38, 
(unsigned char) 0xA3, (unsigned char) 0x54, (unsigned char) 0xCF, 
(unsigned char) 0xF9, (unsigned char) 0x62,
   (unsigned char) 0x8C, (unsigned char) 0x17, (unsigned char) 0x21, 
(unsigned char) 0xBA, (unsigned char) 0x4D, (unsigned char) 0xD6, 
(unsigned char) 0xE0, (unsigned char) 0x7B
};

/* ************************************************** */
/* Function for CRC-calculation with tab operations   */
/* ************************************************** */
unsigned char crc8_tab(unsigned char data, unsigned char crc_init)
{
   unsigned char crc;

   crc = (unsigned char) (CRC_Tab8Value[crc_init] ^ data);
   return (crc);
}


int main(int argc, char* argv[])
{
  const unsigned char auc_bytestream[] = {0x10, 0x03, 0x08, 0x00, 0x08, 
0x00, 0x05, 0x00, 0x13, 0x80, 0x40, 0x00, 0x0a};

  int i;
  char uc_crc;

  /* Initialwert */
  uc_crc = (unsigned char) 0;
  for (i = 0; i < sizeof(auc_bytestream); i++)
  {
    uc_crc = crc8_tab(auc_bytestream[i], uc_crc);
  }
  printf("CRC: 0x%02X\n", uc_crc);
  return 0;
}

von Markus CRC (Gast)


Lesenswert?

Möglichkeit 2 (weniger ROM, längere Bearbeitungszeit:

unsigned char crc8_calc(unsigned char data, unsigned char crc_init)
{
   unsigned char crc;
   unsigned char polynom;
   int i;

   crc = crc_init;
   for (i = 0; i < 8; i++)
   {
      if (crc & 0x80)
      {
         polynom = (unsigned char) 0x9B;
      }
      else
      {
         polynom = (unsigned char) 0;
      }
      crc = (unsigned char)((crc & ~0x80) << 1);
      if (data & 0x80)
      {
         crc = (unsigned char)(crc | 1) ;
      }
      crc = (unsigned char)(crc ^ polynom);
      data = (unsigned char)(data << 1);
   }
   return (crc);
}

int main(int argc, char* argv[])
{
  const unsigned char auc_bytestream[] = {0x10, 0x03, 0x08, 0x00, 0x08, 
0x00, 0x05, 0x00, 0x13, 0x80, 0x40, 0x00, 0x0a};

  int i;
  char uc_crc;

  /* Initialwert */
  uc_crc = (unsigned char) 0;
  for (i = 0; i < sizeof(auc_bytestream); i++)
  {
    uc_crc = crc8_calc(auc_bytestream[i], uc_crc);
  }
  printf("CRC: 0x%02X\n", uc_crc);
  return 0;
}

von Martin H. (martinhaller)


Lesenswert?

Hallo Markus,

beide Varianten funktionieren! Die Gastherme spricht mit mir (d.h. 
andere eBus-Teilnehmer haengen ACK Bytes dran, wenn sie adressiert sind 
- auch ein ebus Ping funktioniert)!

Vielen vielen Dank!

Gruss Martin

von Michael W. (mictronics) Benutzerseite


Lesenswert?

Fein, nur zum Verstehen, wo war jetzt das Problem der Berechnung?
Das Polynom ist 0x9B und der Init Wert ist 0. Warum ist die Online 
Berechnung nicht in der Lage das CRC zu berechnen?

von Martin H. (martinhaller)


Lesenswert?

Hallo Michael,

Michael Wolf wrote:
> Fein, nur zum Verstehen, wo war jetzt das Problem der Berechnung?
> Das Polynom ist 0x9B und der Init Wert ist 0. Warum ist die Online
> Berechnung nicht in der Lage das CRC zu berechnen?

Usererror :-)

Ich hatte leider nicht gelesen, dass man auch Hex-Zahlen eingeben kann!
Daher hab ich die Seite als gut, aber fuer den speziellen Fall nicht 
hilfreich angesehen - leider!

Gruss Martin

von Michael W. (mictronics) Benutzerseite


Lesenswert?

Ich habe dort hex Zahlen eingeben, mit %. Hat aber trotzdem nicht 
funktioniert.

von Markus CRC (Gast)


Lesenswert?

Hallo Martin,

freut mich, dass Dir der Code geholfen hat. Die CRC-Berechnung kann 
einen zum Verzweifeln bringen, kenne ich aus Erfahrung.

Wie interpretierst Du die Daten der Telegramme? Hast Du offizielle 
Beschreibungen des eBusses (Profile usw.)? Ich habe eine Wolf-Heizung 
mit Raumtemperaturregler, was in der Übergangszeit bei Sonnenschein 
nicht so richtig funktioniert. Wahrscheinlich werde ich dieses Problem 
im Winter angehen. Falls Du mir Doku zur Verfügung stellen könntest....
markus punkt schaetzmueller auf gmx in de

Vielen Dank
Markus

von Martin H. (martinhaller)


Lesenswert?

Hallo Markus,

Markus CRC wrote:
> freut mich, dass Dir der Code geholfen hat. Die CRC-Berechnung kann
> einen zum Verzweifeln bringen, kenne ich aus Erfahrung.

Oh, ja ich hatte schon fast verzweifelt. Dachte, ich waere nun mein 
Leben lang dazu verdammt, nur stumm auf dem ebus lauschen zu muessen ;-)

> Wie interpretierst Du die Daten der Telegramme? Hast Du offizielle
> Beschreibungen des eBusses (Profile usw.)?

Ja, ich habe beim eBus User Club angefragt und die Specs erhalten. Darin
sind Layer 1 und 2 (d.h. die elektrischen Dinge, das 
Arbitrierungsverfahren, Auto-SYN etc.) und Layer 7 mit den "normalen"
Frames. Auch ist eine Netzwerk-Management Doku dabei, die hab ich mir 
aber im Detail noch nicht durchgesehen.

Beschrieben sind auf Layer 7 leider nur die Kommunikation zwischen 
Reglern und Feuerungsautomaten; da wir eine Solaranlage dran 
angeschlossen haben, waere das natuerlich auch sehr interessant. Auf dem 
Bus konnte ich  ausser den FA<->Regler Frames auch undokumentierte 
Frames ersniffen; die gehoeren mit der Herstellerkennung 0x50 wohl zu 
der Fa. Kromschroeder.
Die wollten mir leider genauso wenig wie Wolf (wir haben eine CGB-20 
Therme) weitere Specs geben, auch nicht auf Hinweis, dass ich eine
NDA unterschreiben wuerde. Schade! (Haetten sie Linux in der Gastherme,
koennte man sie auf Sourcecode-Einsicht verklagen ;-))

Als naechsten Schritt moechte ich noch einen MAX232 an die 
Interface-Schaltung haengen und dann mal die Windows-Software von Wolf 
drauf loslassen. (Auch ein Herbst-/Winter-Projekt)

Gruss Martin

von Christoph (Gast)


Lesenswert?

Hi,
wir haben auch eine Wolf-Brennwerttherme (GBE20) die komische 
Regelspielchen macht.

<Windows-Software von Wolf drauf loslassen>
Wo bekommt man diese? Ich habe bisher nur ein Komplettpaket aus 
Schnittstellenwandler und Software für 250,- € gefunden.

Gruß
Christoph

von Ha Jo (Gast)


Lesenswert?

Hallo Martin,

hast Du die eBus Specs als PDF? Würdest Du sie mir per
Mail schicken oder sie hier posten? Ich habe auch eine Wolf-
Therme und würde sie gerne mit eigenen Mittlen steuern.

Ich haatte auch vor ca. 6 Monaten bei der User Group gefragt
aber nie eine Antwort erhalten.

Danke schön.
Joachim

von Martin H. (martinhaller)


Lesenswert?

@Christoph:

> Wo bekommt man diese? Ich habe bisher nur ein Komplettpaket aus
> Schnittstellenwandler und Software für 250,- \u20ac gefunden.

Man kann zwar die SW auf der Wolf Website runterladen, aber - wie ich 
feststellen musste - nutzt es nichts: die SW spricht mit dem ISM1 
(diesem teuren Interface) ein eigenes Protokoll, leider kein eBus :-(

Gruss Martin

von Sido (Gast)


Lesenswert?

@hajo
Hatte ich auch gemacht und keine Reaktion erhalten.
Inzwischen bekommt man aber, wenn man sich bei ebus.de einträgt, eine 
automatische Mail mit den entsprechenden PDFs.

Freue mich schon auf die ersten AVR-Ebus-Lösungen! Schön wäre z.B. eine 
Einbindung eines vorhandenen 433/866MHz Funktempsensors als 
Außentempsensor oder eine Funkuhr als Zeitbasis! Sowas kostet mir vom 
Hersteller einfach zuviel!

von KlaRa (Gast)


Lesenswert?

Hallo,
die eBus - Usergroup hat mir heute 2 MByte an Spezifikationen zugesandt. 
Nach dem ich mich im Juli das erste Mal anmeldete und nichts passierte, 
habe ich mich Samstag erneut angemeldet und heute eine Antwort erhalten. 
Das ist wirklich nicht schlecht.
Die Vaillant - Anlage ist auch schon installiert. Als erstes werde ich 
die Schnittstelle entwickeln. Ich möchte das Vaillant - Gerät vorerst 
nur lesend kontaktieren und auch jegliche Beeinflussung meinerseits 
vermeiden. Deshalb werde ich sofort mit Optokopplern arbeiten. Die 
Elektronik werde ich über ein Schaltnetzgerät ebenfalls autark 
versorgen.
Ich hoffe in den nächsten 6 Wochen starten zu können und selbst etwas 
zum Thema beitragen zu können.
mfg Klaus

von Christoph (Gast)


Lesenswert?

Ich habe mir nun diesen Pegelwandler zusammengebrutzelt.
Nach diversen Designfehlern in der Platine funktioniert er auch, d.h. 
ich empfange über Hyperterminal oder Serialwatcher auch "Daten".

Nur leider passen diese Daten überhaupt nicht zu der Spec.
Eigentlich sollte das SYN-Zeichen AA in Hex sein, aber meine 
mitgeloggten Daten enthalten keine AA-Zeichen.

????

Mit welchem Programm habt ihr die Daten mitgeschrieben, bzw. 
interpretiert?

Gruß
Christoph

von Marc B. (marcb)


Lesenswert?

Hallo,
schaue mal nach ob die Spannung am eBus auch 24V beträgt. Bei mir sind 
es nur 16V, dementsprechend mußte der Spannungsteiler angepasst werden, 
damit der OP richtig arbeitet. Denke Du hast auch den Pegelwandler nach 
dem Bild aus dem PDF-Dokument erstellt, oder?
Gruß,
Marc

von Christoph (Gast)


Lesenswert?

Hi Marc,
ich habe den Pegelwandler gemäß dem PDF-Dokument aufgebaut und versorge 
ihn von extern mit 24 V. Ferner habe ich auf der Platine noch einen 7805 
zur 5 Volterzeugung des nachgeshalteten MAX232.

Ich bekomme auch saubere 5 V Pegel auf dem Ausgangspin, bzw. es kommen 
Daten im PC an (MAX232 hinter Pegelwandler).

Ich hatte jetzt schon die Vermutung, dass der MAX232 mit seiner 
Invertierung der Signale die Daten verfälscht. ??
Daraufhin habe ich die Pin's 2 und 3 am LM358 vertauscht.

Die Daten sahen aber noch identisch aus.

Ich vermisse in den geloggten Daten die Zeichen AA, 00 und evtl. FF.

Mit welchem Programm hsat du die Daten mitgeloggt?

Gruß
Christoph

von Klaus R. (klara)


Lesenswert?

Hallo Christoph,
ich habe meinen Pegelwandler ebenfalls seit ein paar Tagen am Laufen. 
Das Problem, dass man keine AA´s sah hatte ich anfangs auch.

071023_213344 > 15|00|15|00|15|00|15|00 15|00|15|00|15|00|15|00 
15|00|15|00|15|00|15|00 15|00|15|00|15|00|15|00 15|00|15|00|95|07|F0|AF 
D2|D7|FD|ED|FF|00|7B|A6 A9|F7|01|26|FD|FF|3B|3D FE|AB|00|15|00|15|00|15 
00|15|00|15|00|15|00|15 00|15|00|15|00|15|00|15 00|15|00|15|00|15|00|15 
00|15|00|15|00|15|00|15 00|

Der Fehler war der, mein Signal kam invertiert an.

AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA| 
AA|AA|AA|AA|AA|10|08|B5|10|09|00|00|00|78|FF|FF|41|FF|00|22|00|01|01|9A| 
00|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA| 
AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA| 
AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA| 
AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|
071027_182544 > 182544: 
10|08|B5|10|09|00|00|00|78|FF|FF|41|FF|00|22|00|01|01|9A|00|

Also wenn Du 15 00 emfängst, so ist das Singal noch zu invertieren.

Nachdem ich mich ein wenig mit dem eingentliche Inhalt der Daten 
auseinandergesetzt habe, musste ich leider fest stellen das Vaillant für 
seine Primärbefehle fast immer B5 verwendet. In der Doku des 
eBus-Userclubs steht, dass man jedem User für proprietäre Aufgaben einen 
Code spendiert hat. Vaillant hat eben B5. Nur 99% aller Meldungen bauen 
auf B5. Das heisst, den Rest darf man sich hart erarbeiten.

Meine Frage, wer hat schon B5 - Befehle von Vaillant entschlüsseln 
können?

Gruss Klaus.

von Marc B. (marcb)


Lesenswert?

Hi Christoph,
ich habe die Versorgungsspannung direkt über den eBus geholt, daher 
mußte ich den Spannungsteiler anpasssen.
Versuche doch einmal die Pegel direkt an OP (Pin 2/3 und 1) zu messen. 
Da sollte ja sauber eine Low und High Signal vom eBus erkannt werden.
Ansonsten schließe mal ein Oszilloskop am eBus an und schaue Dir die 
Signalverläufe an.
Ich denke, wenn Du für den 130K Widerstand im Spannungsteiler ein Poti 
einbaust, dann kannst Du sauber einen Abgleich herstellen. So habe ich 
das auch gemacht.
Also Programm am PC habe ich u.a. Hyperterminal oder Hercules Terminal 
verwendet.
Bei mir ist der Herstellercode 10 (für die Fa. TEM, die baut die 
Regelung für die Wärmepumpen von Hautec). Auch hier ist dann bei der 
Auswertung noch etwas Arbeit angesagt.

Gruß,
Marc

von Christoph (Gast)


Lesenswert?

Hi,
danke vorerst für die Hilfestellung.

Es kann sein, dass ich den Fehler gefunden habe.
Scheinbar hat unsere Wolf-Brennwertherme keinen EBus sondern den 
Vorläufer Namens SCOM.
In der Montage- und Bedienungsanleitung der Therme steht zwar etwas von 
EBus, aber ich habe in anderen Wolf-Dokumenten etwas von einem SCOM-Bus 
bei unserer Therme gefunden.

#Ansonsten schließe mal ein Oszilloskop am eBus an # Leider habe ich 
keinen Oskar zur Verfügung. Da ich aber recht zuverlässig Daten über den 
Pegelwandler bekomme, glaube ich, dass die Pegel passen.

Ich werde mal weiter forschen, so leicht gebe ich nicht auf!

Gruß
Christoph

von Friedrich H. (frihu)


Lesenswert?

Hallo,

habe mit Interesse eure Beiträge über Ebus gelesen. Ich habe mit einer 
Wärmepumpe von Bartl nun auch einen Regler von TEM mit Ebus und würde 
gerne einige Daten auslesen. Mir fehlt allerdings der 
Schnittstellenwandler und ich möchte keine 200€ für so ein Teil 
bezahlen. Wenn ich es recht verstanden habe, lässt sich der Wandler wohl 
selber "zusammenbruzzeln". Kann mir jemand sagen, wo ich Unterlagen und 
evtl. die passenden Bauteile bekomme?

Gruß
Friedrich

von Marc B. (marcb)


Lesenswert?

Hallo,
die Bauteile kannst Du bei Reichelt bestellen und einen Schaltplan 
findest Du in folgendem Dokument:
http://www.investigacion.frc.utn.edu.ar/giii/REDES/buses/files/eBUS_Stuttgart_041201_eBUS_Only.PDF


Gruß,
Marc

von Friedrich H. (frihu)


Lesenswert?

Hallo Marc,

vielen Dank für diesen Tipp. Jetzt fehlt ja nur noch die Platine mit
Bestückungsplan dann kann´s losgehen. Gibt es die auch irgendwo oder
habt Ihr die Schaltung auf Rasterplatinen aufgebaut?

Gruß Friedrich

von Marc B. (marcb)


Lesenswert?

Hallo,
ich habe das für den ersten Versuch erstmal auf einer Rasterplatine 
gelötet.
Sicherlich kann man auch später mal über ein layout nachdenken.

Viel Spaß.

gruß,
Marc

von Stefan W. (wswbln)


Lesenswert?

Hi Leute,

gibt's was Neues von der "eBus-Front"?
Was machen die Decodier-Anstrengungen?


Sido wrote:
> @hajo
> Hatte ich auch gemacht und keine Reaktion erhalten.
> Inzwischen bekommt man aber, wenn man sich bei ebus.de einträgt, eine
> automatische Mail mit den entsprechenden PDFs.

Ich habe mich auch vor ca. 1/2 Stunde registriert und vor 1/4 Stunde die 
Mail mit einem zeitweilig gültigen Link auf die Spec. bekommen. Und das 
am Samstag (scheint also wirklich ein Auto-Reply zu sein).

Das Thema eBus ist bei mir zwar noch nicht akut, aber meine Heizung samt 
Steuerung hat nun ihre 13 Jahre auf dem Buckel und es schadt' sicher 
nichts, sich so langsam mal zu informieren, was sich am Markt so tut 
-daher >ABO< für diesen Thread.

von Vorname N. (mhz)


Lesenswert?

abo

von Ebc E. (ebc)


Lesenswert?

>Die Gastherme spricht mit mir (d.h.andere eBus-Teilnehmer haengen ACK
>Bytes dran, wenn sie adressiert sind- auch ein ebus Ping funktioniert)!

@Martin Haller

Für das Senden eines Telegrammes welche QQ (Quelladresse ) hast du da 
genommen ? (Adresse FFh oder 00h vielleicht ? (Modem/PC) )

Sendest du einfach darauf los oder hast du die Sachen wie im Dokument 
"Netzwerkmanagment" besschrieben implementiert ?

fg
Christian

von golem (Gast)


Lesenswert?

Hallo,

da meine alte Vaillant Heitzung dann jetzt doch mal kaputt war ( nach 30 
Jahren ist das OK ;-) ). Habe ich mir eine neue zugelegt. Bei der 
installation der neuen vielen mir direkt die Klemmen mit der Bezeichnung 
Bus auf.

Es kribbelt in den Fingern. Würd sich super mit

Da es die ebus Seite nicht mehr gibt, hier mal wieder die FCrage, wo 
kann ich Dokumentation her bekommen???


gruß golem

von frihu (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

hab auch eine Wärmepumpe mit Steuerung über eBus gekauft und mir hat es 
auch in den Fingern gekribbelt. Bin unter anderem auf der Seite:
http://www.investigacion.frc.utn.edu.ar/giii/REDES/buses/files/eBUS_Stuttgart_041201_eBUS_Only.PDF
fündig geworden. Ich bin so weit gekommen, dass ich mir den 
eBus-Konverter zusammen gebaut habe und auch zum laufen gebracht habe. 
Letztendlich bin ich aber aus Zeitmangel an der Software gescheitert. Da 
meine Heizung nun auch zu großer Zufriedenheit läuft, ist das Projekt 
bei mir eingeschlafen. Nun liegt der Konverter bei mir rum und wartet 
auf weitere Einsätze. Ich wäre bereit, ihn für schlappe 50€ abzugeben.

Wenn Interesse besteht, melde Dich.

Gruß Friedrich

von Vorname N. (mhz)


Lesenswert?

Welche Variante des Konverters hast du da aufgebaut?

von frihu (Gast)


Angehängte Dateien:

Lesenswert?

habe dir die Schaltung im Anhang mit geschickt. Sie ist auf Seite 28 des 
PDF_Dokuments. Habe aber mit galvanischer Trennung über Optokoppler 
gearbeitet (wegen evtl. Rückwirkungen und Garantie usw.), 
Stromversorgung über externe 24V-Versorgung und Anschluss an PC über 
Com-Schnittstelle, Datenflussanzeige über Leuchtdioden. Das ganze auf 
einer Lochplatine aufgebaut und in formschönen Gehäuse (wie gesehen) 
verpackt.

Falls Du noch weitere Infos brauchst, melde Dich einfach direkt bei mir, 
meine Mail ist frihu1@web.de

Gruß Friedrich

von Juri H. (juri)


Angehängte Dateien:

Lesenswert?

Da ich momentan keine bessere Stelle finde, hänge ich hier einfach mal 
ein Dokument an, in dem ich alle vom mir gefundenen Vaillant eBus 
Kommandos soweit möglich dokumentiert habe - sowohl als PDF als auch als 
OpenOffice-Dokument. Wer Ergänzungen oder Korrekturen hat, bitte 
entweder das Dokument geändert anhängen, oder wir setzen den Inhalt in 
ein Wiki.

Gruß, Juri

von KlaRa (Gast)


Lesenswert?

Hallo Juri,

>> alle vom mir gefundenen Vaillant eBus Kommandos soweit möglich dokumentiert

Das macht ja wieder mut. Wie bist Du da vorgegangen?
Ich hatte festgestellt, dass gerade Vaillant von firmeneigenen Codes 
reichlich gebrauch macht. Ich habe auch keinerlei Möglichkeit gesehen an 
Informationen von Vaillant heranzukommen.

Gruss Klaus.

von Juri H. (juri)


Lesenswert?

Hallo Klaus,

ich habe mich mit einem selbstgebauten Interface auf den Ebus gehängt 
und angefangen, die Befehle mitzulesen. Dazu habe ich mir ein kleines 
Programm geschrieben, welches die Befehle dekodiert - erst habe ich nur 
als Hex anzeigen lassen und dann versucht, die Werte zu interpretieren.
Es war halt etwas Detektivarbeit notwendig: Unterscheiden der Befehle, 
einteilen in Kommunikationsrichtungen (Regler -> Therme, Regler -> 
Bcast, ...) und dann einen Befehl herausnehmen und sich die Änderungen 
der Werte über die Zeit ansehen und überlegen, welcher Datentyp (z.B. 
BCD, Data1c, Data2b, ...) dahintersteckt. Dann die Werte mit den 
Anzeigen am Boiler/ Regler vergleichen...

Wäre sehr interessant, mal einen Mitschnitt von einer anderen 
(Vaillant-)Installation zusehen.

Gruß,
Juri

von KlaRa (Gast)


Lesenswert?

Hallo Juri,
mitlesen konnte ich auch schon. Dann musste ich leider feststellen, dass 
Vaillant reichlich Gebrauch von eigenen Codes macht. Dein Ansatz macht 
mir wieder Mut sich doch noch einmal mit dem Thema zu beschäftigen. Ich 
hoffe in den nächsten Monaten mal dazu zu kommen. Ich werde jedenfalls 
dann berichten.

Gruss Klaus.

von 18F452 (Gast)


Lesenswert?

Hallo Leute, falls es jemanden interesiert anbei einige Daten 
Mittschnitte einer Vaillant auromatic 560
FF EC B5 09 03 0D 00 00  BA 00 03 F9 02 00 8A 00    SP1 0x02 
F9/16=47,56C
                                    --HByte
                                 --LByte

FF EC B5 09 03 0D 01 00 21 00 03 5D 02 00 90 00    SP2  0x03 
5D/16=37,81C
                                    --HByte
                                 --LByte

FF EC B5 09 03 0D 02 00 17 00 03 00 00 A9 01 E6 00  SP3
                                    --HByte
                                 --LByte

FF EC B5 09 03 0D 03 00 8C 00 03 27 02 00 40 00    Kol1 0x02 
27/16=34,43C
                                    --HByte
                                 --LByte

FF EC B5 09 03 0D 04 00 7B 00 03 2A 00 00 13 00    Kol2 0x00 
2A/16=2.625C
                                    --HByte
                                 --LByte

FF EC B5 09 03 0D 05 00 E0 00 03 DC 01 00 9F 00    Ertrag 0x01 
DC/16=29.75C
                                    --HByte
                                 --LByte

von KlaRa (Gast)


Lesenswert?

Hallo,
ich bin daran sehr interessiert. Könntest Du das noch ein wenig mehr 
kommentieren?

SP1 0x02,...,Kol1 0x02,...Ertrag 0x01


Juri Haberland hat in seiner Aufstellung der Vaillant Commands den 
Service B5h 09h noch nicht erfasst.

Gruss Klaus.

von Juri H. (juri)


Lesenswert?

Hi Klaus,

wenn man sich die Hex-Daten und die Bedienungsanleitung ansieht, ist das 
Format eigentlich klar (bis auf die unbenutzten Felder, da muß man 
raten):

SP1-3 sind Temperatur Speicherfühler 1-3 in °C
Kol1/2 sind Temperatur Kollektorfühler 1/2 in °C
Ertrag ist Ertrag, wobei die Bedienungsanleitung von kWh spricht, nicht 
von °C

Das einzige, das mich wirklich verwundert hat, ist die Absenderadresse 
FFh, sprich "PC/Computer".

@18F452:
Hast du das mit einem Vaillant-Programm vom PC aus abgefragt?

M1 QQ        Source address
M2 ZZ        Target address
M3 PB  = B5h Vaillant command
M4 SB  = 09h Get (Solar?) Data
M5 NN  = 03h Length of data
M6 xx1 = 0Dh (???, aber konstant)
M7 xx2 = 00h - 05h Get SP1, SP2, SP3, Kol1, Kol2, Ertr.
M8 xx3 = 00h (???, aber konstant)
M9 CRC
S1 ACK
S2 NN  = 03h Length of data
S3 dd_L |
S4 dd_H |= Data2c
S5 yy  = 00h Fühler angeschlossen, oder AAh kein Fühler angeschlossen
S6 CRC
M10 ACK

Werde ich demnächst in das Dokument aufnehmen, kann aber auch jeder 
andere machen und hier wieder posten...

Gruß,
Juri

von 18F452 (Gast)


Lesenswert?

Hi Juri

Ich hatte die seltene Gelegenheit bei Wartungsarbeiten die Falle scharf 
zu machen und mit zu loggen.
Nach Analyse des Outputs fing ich an die einzelnen Telegramme zu 
analisieren.
(Bin immer noch dran;-)
Mit Ertrag ist hier der Ertragsfühler gemeint und wirklich in Grad Cel.
Die erzeugte kWh Menge liegt auf einem anderen Speicherplatz.

Die bislang ausgeführten Abfragen laufen bei mir tatsächlich über den 
PC(selbstbau Adapter ohne gal.
Trennung wie weiter oben beschrieben-->RS232-->C Progy)
Später möchte ich dies alles in den müC packen.
Für die SRC Adresse kann auch ein beliebiger anderer Wert hergenommen 
werden.
Einfacheitshalber habe ich diese "FF" einfach aus dem Output übernommen.

Weiteres Folgt

von Juri H. (juri)


Lesenswert?

Hi,

würdest du deinen Mitschnitt zur Verfügung stellen, damit ich da auch 
mal reingucken kann?

Gruß,
Juri

von Dirk (Gast)


Lesenswert?

Hallo zusammen,

in einem anderen Thread versuch ich grade, meinen Pegelwandler ans 
Laufen zu bekommen. Wir haben hier eine Vaillant auromatic 560, die ich 
auslesen will. Habt ihr denn auf dem eBus, wenn ihr mit dem Multimeter 
messt eine konstante Spannung oder sehr ihr das Rechtecksignal?
Muss die Kommunikation bei dem Solarregler irgendwie aktiviert werden?

Könnte mir jemand, der die auromatic erfolgreich ausliest, einen 
Schaltplan seines Pegelwandlers zukommen lassen? Ich verzweifel hier 
grad ein bißchen...

Gruß und Danke schon mal im Vorraus!
Dirk

von Siegmund S. (siegmund)


Lesenswert?

Hallo Juri,

ich habe eine auroMATIC 620 und würde sie ebenfalls gerne per PC 
auslesen. Einen RS232-Reader habe ich mir schon gebaut.

Toll dass Du die Vaillant-Befehle bereits zum Teil dekodieren konntest. 
Es gibt übrigens mittlerweile ein eBus-Wiki:
http://ebus.webhop.org

Dumm finde ich die Tatsache, dass es anscheinend bei B5h 04h 
(GetDateTime) verschiedene Kommandos gibt, abhängig von Parameter1 
(erstes gesendetes Datenbyte) und Deine Beschreibung wirklich nur für 
M6=0 gilt.

Anbei ein kurzer Log:

10 26 B5 04 01 00 D9 00 0A 03 37 08 23 18 02 04 10 50 00 A3 00
     *** Date: 18.02.2010  23:08:37
10 3F 05 01 05 A9 01 24 24 00 00 37 00
10 EC B5 04 01 0D C5 00 05 00 00 00 80 00 4C 00
3F 10 05 00 01 A9 01 C2 00
10 EC B5 04 01 09 C1 00 0A 00 00 00 00 07 16 00 00 00 00 74 00
10 EC B5 04 01 12 DA 00 0A A1 FF 00 5E 0B 00 80 00 00 00 11 00
10 FE B5 05 04 27 00 1E 00 D4 AA
10 EC B5 04 01 0F C7 00 0A 52 03 1F 01 21 FF 21 FF 00 00 4A 00
10 26 B5 04 01 01 D8 00 09 19 04 00 00 02 05 00 00 00 2C 00
10 EC B5 05 07 2B 0F 01 00 00 05 00 AB 00 00 00 00
10 3F 05 01 05 A9 01 24 24 00 00 37 00
10 26 B5 04 01 0D D4 00 05 23 00 D7 01 11 E2 00
10 26 B5 04 01 09 D0 00 0A 19 11 3C 00 05 14 00 23 28 00 59 00
10 EC B5 04 01 12 DA 00 0A A1 FF 00 5E 0B 00 80 00 00 00 11 00
10 26 B5 05 04 2D 00 00 00 82 00 00 00 00
10 FE B5 05 04 27 00 1D 00 E2 AA
10 EC B5 04 01 0F C7 00 0A 52 03 1F 01 21 FF 21 FF 00 00 4A 00
10 EC B5 04 01 11 D9 00 06 50 0C 08 50 07 03 B2 00
10 26 B5 05 07 2B 0F 01 00 00 05 00 68 00 00 00 00
10 26 B5 09 01 18 3F 00 0A 00 00 00 00 00 00 00 00 00 00 9F 00
10 3F 05 01 05 A9 01 24 24 00 00 37 00
10 50 B5 04 01 0D F2 00 05 00 00 00 80 00 4C 00
10 50 B5 04 01 09 F6 00 0A 41 41 78 00 80 16 00 0F 4B 00 22 00
10 EC B5 04 01 12 DA 00 0A A1 FF 00 5E 0B 00 80 00 00 00 11 00
10 FE B5 05 04 27 00 1D 00 E2 AA
10 EC B5 04 01 0F C7 00 0A 52 03 1F 01 21 FF 21 FF 00 00 4A 00
10 26 B5 04 01 01 D8 00 09 19 04 00 00 02 05 00 00 00 2C 00
10 50 B5 05 07 2B 0F 01 00 00 05 00 B7 00 00 00 00
10 FE 07 00 09 50 00 01 09 23 18 02 03 10 AD AA
10 3F 05 01 05 A9 01 24 24 00 00 37 00
10 25 B5 04 01 0D DE 00 05 00 00 52 03 37 4B 00
10 25 B5 04 01 09 DA 00 0A 37 00 00 00 03 16 00 0F 5A 00 4E 00
10 EC B5 04 01 12 DA 00 0A A1 FF 00 5E 0B 00 80 00 00 00 11 00
10 26 B5 04 01 00 D9 00 0A 03 13 09 23 18 02 04 10 50 00 08 00
     *** Date: 18.02.2010  23:09:13
10 FE B5 05 04 27 00 1D 00 E2 AA
10 EC B5 04 01 0F C7 00 0A 52 03 1F 01 21 FF 21 FF 00 00 4A 00
10 EC B5 04 01 11 D9 00 06 50 0C 08 50 07 03 B2 00
10 25 B5 05 07 2B 0F 01 00 00 05 00 16 00 00 00 00
10 3F 05 01 05 A9 01 24 24 00 00 37 00
10 23 B5 04 01 0D CA 00 05 00 00 00 80 00 4C 00
10 23 B5 04 01 09 CE 00 0A 14 00 00 00 06 16 00 0F 4B 00 80 00
10 EC B5 04 01 12 DA 00 0A A1 FF 00 5E 0B 00 80 00 00 00 11 00
10 FE B5 05 04 27 00 1D 00 E2 AA
10 EC B5 04 01 0F C7 00 0A 52 03 1F 01 21 FF 21 FF 00 00 4A 00
10 26 B5 04 01 01 D8 00 09 19 04 00 00 02 05 00 00 00 2C 00
10 23 B5 05 07 2B 0F 01 00 00 05 00 EA 00 00 00 00
10 3F 05 01 05 A9 01 25 25 00 00 7F 00
10 EC B5 04 01 0D C5 00 05 00 00 00 80 00 4C 00
10 EC B5 04 01 09 C1 00 0A 00 00 00 00 07 16 00 00 00 00 74 00
10 EC B5 04 01 12 DA 00 0A A1 FF 00 5E 0B 00 80 00 00 00 11 00
10 FE B5 05 04 27 00 1D 00 E2 AA

von Juri H. (juri)


Lesenswert?

Hi Sigmund,

tja, blöd halt, daß die Hersteller nicht die allgemeingültigen Befehle 
nehmen, sondern jeder sein eigenes Süppchen kocht (damit ja nicht eine 
Wolf Therme mit einem Vaillant Regler funktioniert o.ä.)...

Falls ich am Wochenende dazu komme, werde ich mal die Vaillant-Doku 
aktualisieren und eventuell mein kleines (Linux-)Programm hochladen.

Gruß,
Juri

von Siegmund S. (siegmund)


Lesenswert?

Hallo zusammen,

ich habe die Daten von oben in diesem Thread sowie einige zusätzliche 
Informationen, die ich noch hatte in ein Dokumenten-Update eingearbeitet 
(V0.1.0) und im eBus-Wiki abgelegt:

http://ebus.webhop.org

Wer noch weitere Informationen beisteuern will, kann dies gerne tun, das 
Dokument liegt dort als PDF sowie auch auch im ODT Format.

Grüsse,
Siegmund

von Dirk (Gast)


Lesenswert?

Hallo zusammen,

weiß jemand, ob bei der auromatic 560 eine externe Busversorgung nötig 
ist? Evtl. liest 18F452 ja noch mit. Er liest die 560 ja erfolgreich 
aus.
Für Tipps im Voraus schon mal Danke!

von Hugo P. (portisch)


Lesenswert?

Auch wenn dieser Beitrag schon älter ist:

Für Vailliant schaut euch einmal die Software vrDialog an:
http://www.vaillant.co.uk/trade/products-t/controls-t/diagnostics-t/vrdialog-t/

Nach der Installation ist ein Database File zu finden:
vrDIALOG810.mdb

Da stehen viele Interessante Sachen drinnen wie Master/Slave Adressen, 
ID Beschreibungen usw...

von Klaus R. (klara)


Lesenswert?

Hallo Hugo,
ist das dort nicht nur ein Update?
Gruss Klaus.

von Hugo P. (portisch)


Lesenswert?

Ich habe es einfach installiert. Also ist es ein komplettes Setup. 
Hardware dazu habe ich nicht. Ich habe mir nur das Database File 
angesehen.

von Klaus R. (klara)


Lesenswert?

Hallo Hugo,
Danke, könnte interessant sein.
Gruss Klaus.

von Valent T. (valentt)


Lesenswert?

Ich bin auch interessiert, bei der Kontrolle der Vaillant-Kessel mit 
kleinen Linux-basierten Geräten wie TP-Link WR703n mit OpenWRT.

Gibt es Linux-Bibliothek, die Ebus-Protokoll und vor allem 
Vaillant-Erweiterungen unterstützt?

von Klaus R. (klara)


Lesenswert?

Hallo Valent,
> Gibt es Linux-Bibliothek, die Ebus-Protokoll und vor allem
> Vaillant-Erweiterungen unterstützt?

Das ist mir nicht bekannt. Aber es gibt seit dem 31.12.2012 etwas 
vergleichbares, geschrieben in PHP!

http://www.ip-symcon.de/forum/threads/20487-eBus-Connector
http://www.ip-symcon.de/forum/threads/20547-eBus-Manager

Der Kollege terenyi hat dort in zwei Beiträgen eine komplette 
Applikation als Modul für ip-symcon bereitgestellt. Obwohl ich eher eine 
Hass-Liebe zu PHP habe muss ich sagen das durch die Programmierung von 
terenyi bei mir das Ansehen von PHP stark gestiegen ist. Ich wusste 
zuvor nicht das man unter PHP so sauber programmieren konnte!

Gleich am Anfang der Beiträge hat er jeweils die Software, die dann noch 
verbessert wurde, bereitgestellt.

Angehängte Dateien Angehängte Dateien
    Dateityp: zip eBus Connector v1.3.zip (11.9 KB, 293x aufgerufen)
    Dateityp: zip eBus Connector v1.3 Source.zip (13.0 KB, 245x 
aufgerufen)
bzw.
Angehängte Dateien Angehängte Dateien
    Dateityp: zip eBus Manager v1.4 Installer.zip (29.2 KB, 256x 
aufgerufen)
    Dateityp: zip eBus Manager v1.4.zip (15.2 KB, 340x aufgerufen)

Ich habe dies unter VB.NET umgesetzt. Im Kern haben wird dort ein Event 
SerialDataReceived das den EBus ausliest und bei passender Gelegenheit 
Daten in den EBus schreibt.
Ausserhalb haben wir einen Thread der als Nachrichtenverabeiter arbeitet 
und die Daten über eine ReceiveQueue empfängt. Diese Entkopplung ist 
wichtig, da der Heizkessel ziemlich viel Traffic erzeugt und nicht 
gestört werden sollte. Im weiteren Verlauf folgt ein wichtiger Teil, die 
Daten werden ausgewertet.

An diesem Part versuchte ich mich schon vor 2010, hatte ein paar 
Mitstreiter, aber kamen nicht so recht weiter. Erst im Oktober 2012 war 
der Durchbruch geschafft. In internationaler Zusammenarbeit zwischen 
einem Franzosen und einem Deutschen wurde der Code geknackt und ist im 
Beitrag als analyseVaillant3.zip angehangen.

www.ip-symcon.de/forum/threads/19829-Vailant-Ecotec-Plus-und-VCR430-mit- 
eBus-steuern

Angehängte Dateien Angehängte Dateien
    Dateityp: zip analyseVaillant3.zip (75.3 KB, 479x aufgerufen)

Übrigens, terenyi kommt m.E. aus Wien. Eine tolle Sache von den Dreien!
Ich würde mir die drei Beiträge mal genau ansehen. Da steckt einiges an 
Know How drin das Dir weiterhelfen wird.

Wenn Du in PHP zu Hause bist, dann ist ip-symcon bestimmt das Richtige 
für Dich.

Noch eins, der EBus-Koppler. Ich hatte damals zwar selber einen 
EBus-Koppler als Protyp entwickelt, wollte aber möglichst schnell den 
Betrieb aufnehmen können und hatte mich nach Fertiggeräten umgeschaut. 
Im Forum gab es da Kontakte zu eService.

http://www.eservice-online.de

Ich habe den "eBus Koppler USB" gekauft. Der läuft prima und hat noch 
nie Probleme verursacht.
mfg klaus

von John (Gast)


Lesenswert?

Es gibt auch das ebusd Projekt auf github und dazu passende aus der MDB 
generierte Konfigurationsfiles:

https://github.com/john30/ebusd

https://github.com/john30/ebusd-configuration/tree/master/ebusd-1.1.x/vaillant_de

Viele Grüße,
John

von Markus W. (feuerrot)


Lesenswert?

Ohai,

das Topic ist zwar schon etwas älter, zumindest bei mir aber noch das 
erste Ergebnis, wenn man nach "eBUS CRC berechnen" googled. Ich habe mir 
das heute nochmal im Detail angeschaut, weil ich einige Stunden in den 
Versuch versenkt habe, einfach nur eine library für die CRC-Berechnung 
zu nutzen:

Michael W. schrieb:
> Fein, nur zum Verstehen, wo war jetzt das Problem der Berechnung?
> Das Polynom ist 0x9B und der Init Wert ist 0. Warum ist die Online
> Berechnung nicht in der Lage das CRC zu berechnen?
Nach etwas testen liegt das wohl daran, dass die eBUS-spezifische 
CRC-Funktion einen Bug enthält.

"A Painless Guide to CRC Error Detection Algorithms" von Ross 
Williams[0] ist als Einführung ins Thema wirklich gut geschrieben, 
Abschnitt 8 - "A Straightforward CRC Implementation" gibt einen 
Algorithmus zur Berechnung in Pseudocode an:
1
Load the register with zero bits.
2
Augment the message by appending W zero bits to the end of it.
3
While (more message bits)
4
  Begin
5
  Shift the register left by one bit, reading the next bit of the
6
    augmented message into register bit position 0.
7
  If (a 1 bit popped out of the register during step 3)
8
    Register = Register XOR Poly.
9
  End
10
The register now contains the remainder.
(Dabei ist W hier 8)

Der fehlende Schritt ist "Augment the message by appending W zero bits 
to the end of it." - ergänzt man die Daten, die in die CRC-Funktion für 
den eBUS eingespeist werden, um ein zusätzliches 0x00, erhält man für 
die CRC die Werte, die auch z.B. ein Onlinerechner ausgibt:
1
// Testfälle, input sind die Daten, expect die eBUS-CRC
2
{
3
  name:   "μC.net Beispiel",
4
  input:  []byte{0x10, 0x03, 0x08, 0x00, 0x08, 0x00, 0x05, 0x00, 0x13, 0x80, 0x40, 0x00, 0x0a},
5
  expect: 0x71,
6
},
7
{
8
  name:   "eBUS Request",
9
  input:  []byte{0x10, 0x08, 0xB5, 0x11, 0x01, 0x01},
10
  expect: 0x89,
11
},
12
{
13
  name:   "eBUS Response",
14
  input:  []byte{0x09, 0x37, 0x37, 0x00, 0x80, 0x36, 0x37, 0x00, 0x00, 0xFF},
15
  expect: 0xC9,
16
},
17
18
// CRC ist die eBUS-CRC-Funktion
19
// μC.net Beispiel
20
CRC({0x10, 0x03, 0x08, 0x00, 0x08, 0x00, 0x05, 0x00, 0x13, 0x80, 0x40, 0x00, 0x0a}): 0x71
21
CRC({0x10, 0x03, 0x08, 0x00, 0x08, 0x00, 0x05, 0x00, 0x13, 0x80, 0x40, 0x00, 0x0a, 0x00}): 0x05
22
// eBUS Request
23
CRC({0x10, 0x08, 0xB5, 0x11, 0x01, 0x01}): 0x89
24
CRC({0x10, 0x08, 0xB5, 0x11, 0x01, 0x01, 0x00}): 0x89
25
// eBUS Response
26
CRC({0x09, 0x37, 0x37, 0x00, 0x80, 0x36, 0x37, 0x00, 0x00, 0xFF}): 0xC9
27
CRC({0x09, 0x37, 0x37, 0x00, 0x80, 0x36, 0x37, 0x00, 0x00, 0xFF, 0x00}): 0x41

Gegenprüfen lässt sich das z.B. mit [1] - für den Input "0x10, 0x03, 
0x08, 0x00, 0x08, 0x00, 0x05, 0x00, 0x13, 0x80, 0x40, 0x00, 0x0a" erhält 
man den Output 0x05, den auch die eBUS-CRC-Funktion ausgibt, wenn man 
als Input "0x10, 0x03, 0x08, 0x00, 0x08, 0x00, 0x05, 0x00, 0x13, 0x80, 
0x40, 0x00, 0x0a, **0x00**" wählt.

Das erklärt dann auch, warum die Variante aus Abschnitt 9 "A 
Table-Driven Implementation" mit den nicht-erweiterten Daten keine 
Probleme macht:
> The trouble, you see, is that this loop operates upon the AUGMENTED
> message and in order to use this code, you have to append W/8 zero
> bytes to the end of the message before pointing p at it.
Das ist beim eBUS eben nicht der Fall und damit fällt die leicht 
angepasste Variante aus Abschnitt 10, die man häufiger findet, wenn man 
nach tabellenbasiertem CRC sucht und die diese Anpassung nicht mehr 
benötigt, raus:
1
// Diese Variante funktioniert für den eBUS
2
// in der loop: crc = dataByte ^ table[crc]
3
func tableCRC(data []byte) byte {
4
  var crc byte
5
  for _, dataByte := range data {
6
    crc = dataByte ^ table[crc]
7
  }
8
  return crc
9
}
10
11
// Diese Variante funktioniert bei echtem CRC-8
12
// in der loop: crc = table[dataByte ^ crc]
13
func correctTableCRC(data []byte) byte {
14
  var crc byte
15
  for _, dataByte := range data {
16
    crc = table[dataByte ^ crc]
17
  }
18
  return crc
19
}


Viele Grüße
feuerrot

[0] <http://www.ross.net/crc/download/crc_v3.txt>;
[1] <http://www.sunshine2k.de/coding/javascript/crc/crc_js.html>;

: Bearbeitet durch User
von Klaus R. (klara)


Lesenswert?

Klaus R. schrieb:
> Hallo Valent,
>> Gibt es Linux-Bibliothek, die Ebus-Protokoll und vor allem
>> Vaillant-Erweiterungen unterstützt?
>
> Das ist mir nicht bekannt. Aber es gibt seit dem 31.12.2012 etwas
> vergleichbares, geschrieben in PHP!
>
> http://www.ip-symcon.de/forum/threads/20487-eBus-Connector
> http://www.ip-symcon.de/forum/threads/20547-eBus-Manager
>
> Der Kollege terenyi hat dort in zwei Beiträgen eine komplette
> Applikation als Modul für ip-symcon bereitgestellt.

Es gilt immer noch das was ich vor über 8 Jahren geschrieben habe.
mfg Klaus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.