Hallo,
ich habe schon viele interessante Artikel hier im Forum gefunden, und
möchte mit diesem Artikel auch mal etwas zurückgeben.
Ich habe eine Buderus Wärmepumpe WPS 8K-1 und möchte diese über meine
Hausautomatisierung (FHEM) auslesen. Für die Buderus Heizungen gibt es
ein Ethernet Gateway KM200 V2 welches den EMS und CAN Bus auslesen kann
und die Informationen per Web-Kommando abrufbar zur Verfügung stellt.
Leider ist die darüber abrufbare Information für die WP äußerst mager.
Ich weiß nicht, ob das nur an dem FHEM Plugin liegt, weil dem die
notwendigen Web-Links fehlen, oder ob der Hersteller die Firmware des
KM200 bewusst noch knapp gehalten hat. Aber die von der zugehörigen
Buderus App präsentierten Informationen sind auf ebenso magerem Niveau.
Informationen über aktuelle Kreislauftemperaturen, Energieverbrauch,
usw. die über das Terminal der WP abrufbar sind, werden nicht verfügbar
gemacht.
Deshalb bin ich jetzt mal selbst tätig geworden und habe mich erst mal
auf die Suche nach einem einfachen, an der Raspberry anschließbaren CAN
Modul gemacht. Meine Wahl fiel auf USBtin und es war wohl nicht die
Falsche - einen Datenverlust auch bei hoher Auslastung konnte ich nicht
feststellen.
In der Doku des Entwicklers (Thomas Fischl) wird beschrieben wie man das
Modul mit CAN-Stack ins Linux integriert.
Mir war das im ersten Schritt zu aufwendig, und ich habe einen anderen
Weg ohne versucht:
Im Linux meldet sich das Modul als /dev/ttyACM0 und über das
Terminalprogramm mincom lässt sich das Modul ansprechen:
minicom -b 115200 -o -D /dev/ttyACM0
Nach einigen Versuchen mit verschiedenen Baudraten hat sich 125kBaud als
passend herausgestellt. Der Bus schreibt auch ohne angeschlossenes KM200
regelmässig eine Fülle von Informationen.
Die Aufzeichnung habe ich dann mit ExtraPutty gemacht, diese Version
kann eine Zeit ins log schreiben:
1 | [20/10/15 - 22:42:33:563] T00048030 1 05 << Transmit 29Bit CanId = 0x00048030, 1 Byte Data = 0x05
|
2 | [20/10/15 - 22:42:34:008] T00064030 2 0190
|
3 | [20/10/15 - 22:42:34:058] T08070270 1 00
|
4 | [20/10/15 - 22:42:34:443] T0005C030 1 00
|
5 | [20/10/15 - 22:42:34:641] T00080060 1 00
|
6 | [20/10/15 - 22:42:34:890] T00058030 1 00
|
7 | [20/10/15 - 22:42:35:057] T08074270 1 01
|
8 | [20/10/15 - 22:42:35:327] T00054030 1 00
|
9 | [20/10/15 - 22:42:35:769] T00044030 1 10
|
Interessant wird es aber, wenn das KM200 angeschlossen wird. Dann wird
nämlich eine komplette Liste der abrufbaren Details als Klartext
gesendet:
1 | R01FD7FE0 0
|
2 | T09FD7FE0 7 0001298A06FD02
|
3 | T01FD3FE0 8 00004E2000000000 << Anforderung vorbereiten, 20000 Bytes (0x00004E20) ab Offset 0
|
4 | R01FDBFE0 0 << Liste anfordern
|
5 | T09FDBFE0 8 0000814A53C66A08
|
6 | T09FDBFE0 8 0200000000000000
|
7 | T09FDBFE0 8 001E414343455353 ..ACCESS
|
8 | T09FDBFE0 8 4F524945535F434F ORIES_CO
|
9 | T09FDBFE0 8 4E4E45435445445F NNECTED_
|
10 | T09FDBFE0 8 4249544D41534B00 BITMASK.
|
11 | T09FDBFE0 8 000161E1E1FC6600
|
12 | T09FDBFE0 8 2300000005000000
|
13 | T09FDBFE0 8 000D414343455353 ..ACCESS
|
14 | T09FDBFE0 8 5F4C4556454C0000 _LEVEL..
|
15 | T09FDBFE0 8 02A1137CB3EB0B26
|
16 | T09FDBFE0 8 000000F000000001
|
17 | ...
|
18 | T01FD3FE0 8 00004E2000004E20 << nächste Anforderung vorbereiten, 20000 Bytes ab Offset 20000 (0x00004E20)
|
19 | R01FDBFE0 0 << Liste anfordern
|
20 | ...
|
21 | T01FD3FE0 8 00004E2000009C40 << nächste Anforderung vorbereiten, 20000 Bytes ab Offset 40000 (0x00009C40)
|
22 | ...
|
23 | T01FD3FE0 8 00004E200000EA60 << nächste Anforderung vorbereiten, 20000 Bytes ab Offset 60000 (0x0000EA60)
|
24 | ...
|
25 | T09FDFFE0 4 9434D9B6 << Listenende
|
Alle Informationen der Tabelle habe ich nicht interpretieren können,
aber wohl die für mich interessantesten:
Eine konstanter Header von 21 Byte, 1Byte Textlänge gefolgt vom mit 0
abgeschlossenen Text:
1 | Index ?????????????? Grenzw?? Grenzw?? Textlänge Text
|
2 | 0000 814A53C66A 0802 00000000 00000000 1E 4143434553534F524945535F434F4E4E45435445445F4249544D41534B00 ACCESSORIES_CONNECTED_BITMASK
|
3 | 0001 61E1E1FC66 0023 00000005 00000000 0D 4143434553535F4C4556454C00 ACCESS_LEVEL
|
4 | 0002 A1137CB3EB 0B26 000000F0 00000001 20 4143434553535F4C4556454C5F54494D454F55545F44454C41595F54494D4500 ACCESS_LEVEL_TIMEOUT_DELAY_TIME
|
5 | 0003 007B130704 0471 00000000 00000000 11 4144444954494F4E414C5F414C41524D00 ADDITIONAL_ALARM
|
6 | 0004 004E252950 0481 00000000 00000000 13 4144444954494F4E414C5F414C41524D5F3200 ADDITIONAL_ALARM_2
|
7 | 0005 00392219C6 0482 00000000 00000000 13 4144444954494F4E414C5F414C41524D5F3300 ADDITIONAL_ALARM_3
|
8 | ...
|
9 | 0A28 03B11E7055 0000 00000000 00000000 28 54494D45525F434F4D50524553534F525F53544152545F44454C41595F41545F4341534341444500 TIMER_COMPRESSOR_START_DELAY_AT_CASCADE
|
Die Liste enthält bei mir 1789 Datenpunkte!
Über die vom KM200 danach zyklisch abgerufenen Werte bin ich auf die
Zuordnung Index zu CAN-Adresse gekommen:
1 | [20/10/15 - 22:58:42:845] R05F7BFE0 0 << Lesen von Index 7DE, PROGRAM_VERSION
|
2 | [20/10/15 - 22:58:42:855] T0DF7BFE0 2 0001 << Antwort = 1
|
3 | [20/10/15 - 22:58:42:949] R05F77FE0 0 << Lesen von Index 7DD, PROGRAM_REVISION
|
4 | [20/10/15 - 22:58:42:956] T0DF77FE0 1 00 << Antwort = 0
|
5 | [20/10/15 - 22:58:43:053] R06687FE0 0 << Lesen von Index 9A1, UI_BRAND
|
6 | [20/10/15 - 22:58:43:058] T0E687FE0 1 04 << Antwort = 4
|
CAN-Adresse Read = 0x04003FE0 | (Index << 14)
CAN-Adresse Write = 0x0C003FE0 | (Index << 14)
Die zwischen den einzelnen Can-Modulen der WP laufenden zyklischen
Informationen haben ein anderes Adressformat.
Hier besteht noch Forschungsbedarf ...