Lauschangriff auf SE WPL 13 CAN-Bus (Teil 1)

Was ich hier gemacht habe ist nicht wirklich neu siehe z.B. hier :
http://www.haustechnikdialog.de/Forum/t/79101/Stiebel-Eltron-WPC10-ueber-CAN-Bus-auslesen-steuern
Aber irgendwie habe ich nie eine Komplett Anleitung wie diese hier gefunden die auch noch bezahlbar ist.

Was braucht man ?
Ein Raspberry Pi Board z.B. von SK pang
http://www.skpang.co.uk/catalog/raspberry-pi-model-b-rev-2-512mb-ram-p-1140.html
Damit hat man dann auch gleich eine Möglichkeit die gewonnen Daten zu loggen
und anderweitig aus zu werten z.B. Datenbank und Webserver.

Ein PICAN Board von z.B. SK pang
http://www.skpang.co.uk/catalog/pican-canbus-board-for-raspberry-pi-p-1196.html
Das Herzstück um den Zugang zum CAN-BUS zu bekommen.

Beides kann man natürlich auch bei Alternativen Händlern einkaufen.

Bitrate
Über den Hinweis von :
http://www.haustechnikdialog.de/Forum/t/79101/Stiebel-Eltron-WPC10-ueber-CAN-Bus-auslesen-steuern
habe ich den Entscheidenden Hinweis zur Bitrate gefunden :

Ergebnis:
Baudrate: 20 kBaud, 11Bit CAN-ID’s (bei anderen Baudraten ist kein Datenverkehr zustande gekommen).
Es waren folgende 3 ID’s zu sehen 180, 480, 500 (hex).

Terminierung des Busses
Aber was noch viel wichtiger war, war die Terminierung des nun verlängerten Busses
mit 120Ohm (100+10+10 Oben Mitte zwischen CAN_H und CAN_L)
Ich habe vorher in den Bus hineingemessen, und entdeckte einen Wiederstand von 150Ohm in Richtung WPL2 Regler
(Auf dem zweiten Bild oben rechts, das Ding mit dem Bedienrädchen)
img_0883 img_0879

Anschluss an den CAN-BUS
Wenn man die Wärmepumpe öffnet findet man irgendwo auch ein grünes Buskabel,
welches bei mir über leicht zugängliche (und beschriftete) Klemmen ging.
img_0880

Initialisierung der Hardware Treiber
Danach ist das „Pre-compiled CAN-Test binary“ von
http://www.skpang.co.uk/catalog/pican-canbus-board-for-raspberry-pi-p-1196.html
notwendig.
Nach dem auspacken und kopieren ins /home/pi Verzeichnis und der Aktivierung des neunen Kernel.img konnte ich mit folgendem Script die Kommunikation abhören

 # initialize
 cd /home/pi/can-test
 insmod spi-bcm2708.ko
 insmod can.ko
 insmod can-dev.ko
 insmod can-raw.ko
 insmod can-bcm.ko
 insmod mcp251x.ko

 dmesg | tail -20                               # Wegen evtl. Fehler mal prüfen

 ip link set can0 type can bitrate 20000
 ifconfig can0 up

 ifconfig can0

 ./candump can0

Was nu ?
Der zweite Teil liegt nun wohl nun in der Auswertung und Weiterverarbeitung der Daten
– SQL Datenbank
– Web Application zur Darstellung
– Am besten gleich ein Interface zum http://www.volkszaehler.org/ (man muss das Rad ja nicht neu erfinden)
Aber, alles nach einander …

Links mit hilfreichen Informationen :
http://www.me-systeme.de/canbus.html#1578569eb20a41712

13 Gedanken zu „Lauschangriff auf SE WPL 13 CAN-Bus (Teil 1)

  1. Hi,
    beschäftige mich auch zur Zeit mit dem Raspberry und Can-Bus.
    Ich kann einwandfrei Can Nachrichten empfangen und Senden, auf dem Raspberry habe ich einen Webserver mit PHP, Mysql, PhpMyAdmin usw. laufen.
    Mir fehlt nur noch die möglichkeit die Can Nachrichten in die Mysql einzutragen oder er automatisch dort eingetragen werden um sie dort per PHP weiter zu verarbeiten.
    Haben Sie da schon einen Lösungs ansatz?
    Das soll irgend wann mal eine Haussteuerung werden.

    Gruß

    • Hallo Oliver,

      Jetzt wo du es sagst, habe ich auch mal wieder auf mein RasPi im Keller geschaut und bemerkt das der seit anfang Februar keine Daten mehr zur meiner Volkszähler instanz sendet 🙁
      Ich muss mir mal anschauen warum, vieleicht komme ich ja dieses WE dazu. Aber im Prinzip ist es ein kleines Bashscript das kontinuierlich läuft und jede Minute die Messungen
      durchführt und die Ergebnisse dann an den VZ sendet.
      Das Script könnte ich dir zusenden, wenn du interesse hast.

      Was mich an deinem Aufbau interessiert ist, hast du herausgefunden was du in den CAN bus senden musst um Messwerte wie Aussentemperatur, Kesseltemperatur, Vorlauf , Rücklauf usw. aus zu lesen ?
      Das ist der Knackpunkt den ich aus Zeitmangel nicht mehr verfolgen kann seitdem mein Sohn auf der Welt ist. Aber vieleicht könnten wir ja ergenzen…

      Gruss
      Klaus

      • Hi Klaus,

        gut das ich dir geschrieben habe 😉
        Und hast das Problem schon entdeckt?

        Das Problem ist bei mir das ich von Linux, C, usw. nur sehr wenig Ahnung habe.
        Ich Programmiere hauptsächlich für Mikrocontroller in Bascom(Basic) und Homepages in HTML, PHP, usw. Mit OOP komme ich noch nicht so richtig klar, aber arbeite da noch dran.

        Ne ne ich habe Nichtmahl so ein System wie du, ich möchte den Raspberry als Schnittstelle zwischen den CAN-Bus und Homepage, später auch Android zu missbrauchen.

        Ich analysiere gerade die Can-Utils und versuche mich mal in C, es sollen nachher alle CAN nachrichten in die Mysql um sie dort mit PHP weiter zu verarbeiten, wie weiß ich noch nicht aber das kommt noch wenn sie erstmal in Mysql fließen.

        Ich möchte mir wenn Zeit, Geld und eigenes Haus da ist eine Haussteuerung aufbauen, Gedanken sind das ich Touchpanel in jedem Raum habe, jeder Schalter konfigurierbar ist, jede Steckdose programmiert werden kann, Heizkörper regeln usw.
        Also das sind zukünftig meine Wünsche, es gibt zwar schon fertige Systeme aber das Basteln macht mehr Spaß 🙂

        Gruß Olli

        • Hi Klaus,
          habe es nach stunden langem suchen, aus probieren und verzweifeln hin bekommen das „candump“ heißt bei mir jetzt „sql_candump“ jetzt direkt in die MySQL Datenbank schreibt.

          Falls du Interesse hast sag bescheid, werde auch die Tage mal versuchen eine Dokumentation darüber zu schreiben, weiß bloß noch nicht ob ich WordPress, Joomla, oder etwas anderes dafür nehmen soll, vielleicht hast du ja ein Tipp.

          Gruß Olli

          • Hallo Oliver,

            wie ich sehe hast du das lange Osterwochenende genutzt um an deinem Projekt weiter zu arbeiten. Mich würde es interessieren wie du das auslesen realisiert hast. Da meine Script Lösung zwar funktioniert aber auch entsprechend langsam ist. (Ich poste gleich noch eine abgepeckte Version)
            Vermulich hast Du es in PHP oder etwas ähnlichem realisiert, oder ?

            Ach so, ich habe bisher keine andere Blog Software benutzt als „WordPress“, daher kann ich wohl nicht sagen das ich sie dir empfehle.
            Aber mit der komme ich sehr gut klar. War auch recht einfach zu installieren.

            Gruss
            Klaus

  2. Hallo,

    erstmal vielen Dank für deinen klasse Beitrag.
    Ich hab mich jetzt endlich dran gewagt, und ebenfalls einen PI B+ gekauft + Canbus (Industrialberry).
    Soweit installiert und alles eingerichtet.

    Zu der Terminierung mit 120Ohm hätte ich noch ne Frage?
    Hast du zufällig noch ne zusätzliche Fernbedienung (FEK) dranhängen?
    Wir haben einen SE WPL13 mit Kühlfunktion. D.h. dort ist die FEK Fernbedienung mit angeschlossen.
    Ich gehe davon aus, dass diese bereits die Busterminierung mittels Widerstand vornimmt?
    Daher bin ich mir unschlüssig ob ich zwischendrin überhaupt „terminieren“ darf, soll?
    Bin leider kein Elektroniker.

    Vielen Dank für dein Feedback…
    P.S: Da ich selbst erst seit ein paar Monate Nachwuchs habe, weiss ich wie das so mit der „Zeit“ ist 😉

    • Hallo Michael,

      vielen Dank für dein Komentar auf meinem Blog.
      Zu deiner Frage siehe auch : http://www.me-systeme.de/canbus.html#1578569eb20a42813
      Ohne Terminierung gibt es nicht nur Reflexionen, sondern beide CAN Leitungen hängen in der Luft.
      In der Praxis reicht bei kurzen Leitungen eine Terminierung an einem Ende,
      idealerweise wird der Bus aber an beiden Enden (und nur dort) mit jeweils 120 Ohm terminiert.

      Also würde ich den Raspberry nur mit den drei Adern an den Bus klemmen ohne die 120 Ohm auf der Klemme.
      Ich habe keine Fernbedienung an meiner WP und würde aber ebenfalls davon ausgehen das die am Ende terminiert ist.

      Gruß
      Klaus

      P.S: Herzlichen Glückwunsch, und genieße auch diese Zeit. Auch wenn es manchmal anstrengend ist schaue ich gern beim wachsen zu 🙂

      • Hallo Klaus,

        danke für deine Rückinfo. Ich habs jetzt mal gewagt, mein PI ohne Busabschluss dranzuhängen.
        Beim versuch den CAN BUS Datenverkehr mit zu horchen, heißt es immer „Device is busy“.
        Da die Datenleitung zwischen Wärmepumpenmanager und unserer Fernbedienung (FEK) doch relativ weit entfernt ist, teste ich demnächst dann doch mal mit Widerstand.
        Hab eh bei Conrad ein günstigen Füllartikel auf 50€ MBW benötigt… von daher, Widerstand ist bestellt.

        Danke dir.

        P.S. Da ich z.Zt. Elternzeit habe, bekommt man jeden „Schritt“ unseres Nachwuchs mit…
        Anstrengend…. ja, kann ich bestätigen… aber wir waren sicherlich nicht anderst/besser 🙂

  3. Hallo,
    über welche CAN-Adresse kann ich bei meiner WPL13 herausbekommen, ob die Warmwasser-Ladepumpe, oder die Heizungspumpe, oder der Abtaumodus gerade aktiv ist?
    Danke.
    Gruß
    Ekkehard

    • Hallo Ekkehard,

      kann ich so gerade nicht sagen, ich würde aber mal nach der aktuellsten Version der can_progs von Jürg schauen (http://www.juerg5524.ch/list_data.php).
      Und dort mal in der Elster Tabelle kramen. Such mal in http://juerg5524.ch/data/ElsterTable.inc nach „Pumpe“
      Ich lasse mit auch ein Pumpen Status anzeigen, bin aber noch nicht daraus schlau geworden was was bedeutet.
      Welche Adress das ist weis ich nicht mehr, und müsste ich heute abend heraus suchen.
      Bitte Poste ein Feedback wenn du etwas herausgefunden hast.

      Gruß
      Klaus

  4. ifconfig zeigt:
    ip -s -d link show can0
    4: can0: mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 10
    link/can
    can state ERROR-ACTIVE restart-ms 0
    bitrate 20000 sample-point 0.875
    tq 3125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
    mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
    clock 8000000

    ein dmesg zeigt folgenden Fehler:
    [ 5236.959892] mcp251x spi0.0: unable to set initial baudrate!
    [ 5237.961034] mcp251x spi0.0 can0: bit-timing not yet defined
    [ 5237.961073] mcp251x spi0.0: unable to set initial baudrate!
    [ 5238.412375] mcp251x spi0.0: CNF: 0x18 0xb5 0x01
    [ 7283.738988] can: broadcast manager protocol (rev 20120528 t)

    Kannst du daher mal eine can-start.sh Konfig rauskopieren:
    Meine sieht so aus:

    #Can
    insmod /lib/modules/3.12.35+/kernel/drivers/spi/spi-bcm2708.ko
    insmod /lib/modules/3.12.35+/kernel/net/can/can.ko
    insmod /lib/modules/3.12.35+/kernel/drivers/net/can/can-dev.ko
    insmod /lib/modules/3.12.35+/kernel/net/can/can-raw.ko
    insmod /lib/modules/3.12.35+/kernel/net/can/can-bcm.ko
    insmod /lib/modules/3.12.35+/extra/spi-config.ko devices=\bus=0:cs=0:modalias=mcp2515:speed=20000:gpioirq=25:pd=20:pds32-0=16000000:pdu32-4=0X2002:force_release
    insmod /lib/modules/3.12.35+/kernel/drivers/net/can/mcp251x.ko
    ip link set can0 up type can bitrate 20000
    #ip link set can0 up
    #ifconfig can0

    Irgendwo ist da noch ein Fehler…..

  5. Hallo,

    kannst du deinen Canbus Start Konfig mal posten? Hab ja ebenfalls eine WPL13.
    Ich bin jetzt ein Schritt weiter, kein Device is busy Fehler mehr…
    Ich seh aber leider noch nichts… irgendwo ist da noch ein Fehler.

    Hier meine:
    can-start.sh
    #Can
    insmod /lib/modules/3.12.35+/kernel/drivers/spi/spi-bcm2708.ko
    insmod /lib/modules/3.12.35+/kernel/net/can/can.ko
    insmod /lib/modules/3.12.35+/kernel/drivers/net/can/can-dev.ko
    insmod /lib/modules/3.12.35+/kernel/net/can/can-raw.ko
    insmod /lib/modules/3.12.35+/kernel/net/can/can-bcm.ko
    insmod /lib/modules/3.12.35+/extra/spi-config.ko devices=\bus=0:cs=0:modalias=mcp2515:speed=20000:gpioirq=25:pd=20:pds32-0=16000000:pdu32-4=0X2002:force_release
    insmod /lib/modules/3.12.35+/kernel/drivers/net/can/mcp251x.ko
    ip link set can0 up type can bitrate 20000
    #ip link set can0 up
    #ifconfig can0

    ————————–

    root@raspberrypi:~# ifconfig
    can0 Link encap:UNSPEC Hardware Adresse 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
    UP RUNNING NOARP MTU:16 Metrik:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    Kollisionen:0 Sendewarteschlangenlänge:10
    RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

    root@raspberrypi:~# ip -s -d link show can0
    4: can0: mtu 16 qdisc noop state DOWN mode DEFAULT qlen 10
    link/can
    can state STOPPED restart-ms 0
    bitrate 0 sample-point 0.000
    tq 0 prop-seg 0 phase-seg1 0 phase-seg2 0 sjw 0
    mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
    clock 8000000
    re-started bus-errors arbit-lost error-warn error-pass bus-off
    0 0 0 0 0 0
    RX: bytes packets errors dropped overrun mcast
    0 0 0 0 0 0
    TX: bytes packets errors dropped carrier collsns
    0 0 0 0 0 0

    Irgendeinen Idee an dieser Stelle?

    • Nachtrag: ein „dmesg“ gibt folgendes aus

      [37612.050011] mcp251x spi0.0 can0: bit-timing not yet defined
      [37612.050051] mcp251x spi0.0: unable to set initial baudrate!
      [37612.922276] mcp251x spi0.0: CNF: 0x18 0xb5 0x01
      [38041.517179] mcp251x spi0.0: CNF: 0x18 0xb5 0x01
      [39925.570499] can: controller area network core (rev 20120528 abi 9)
      [39925.570696] NET: Registered protocol family 29
      [39925.600354] can: raw protocol (rev 20120528)
      [39925.619351] can: broadcast manager protocol (rev 20120528 t)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert