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
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?
Hallo Michael, leider passen die CRCs bei 0x9b auch nicht....
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
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; }
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; }
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
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?
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
Ich habe dort hex Zahlen eingeben, mit %. Hat aber trotzdem nicht funktioniert.
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
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
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
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
@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
@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!
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
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
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
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
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.
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
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
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
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
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
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
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.
>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
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
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
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
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
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.
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
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.
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
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.
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
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
Hi, würdest du deinen Mitschnitt zur Verfügung stellen, damit ich da auch mal reingucken kann? Gruß, Juri
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
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
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
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
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!
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...
Ich habe es einfach installiert. Also ist es ein komplettes Setup. Hardware dazu habe ich nicht. Ich habe mir nur das Database File angesehen.
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?
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.