Inhaltsverzeichnis

Caring Caribou

Caring Caribou auf Github

Vorrausetzung für den Raspi sind:

Installation

  1. git clone https://github.com/CaringCaribou/caringcaribou.git
  2. CAN-Hardware zum Laufen bringen (s. Raspi 3 - MCP-2515 - (SPI) CAN Support)
  3. python3 installieren (sollte eigentlich auch mit 2 gehen. Ich habe nur 3 probiert)
  4. python-can installieren
    pip3 install python-can 
  5. Default Konfiguration für Python-CAN anlegen.
    cat ~/.canrc
    [default]
    interface = socketcan_native     // Achtung in neuere Socketcan  2.2 (python-can 4.1) wieder ohne native!!!!
    channel = can0

Nach der erfolgreichen Installation kann man es Testen, in dem man in das „Tool“ Verzeichnis von Caring Caribou wechselt und

cd /home/pi/dev/caringcaribou/tool
python3 cc.py dump

-------------------
CARING CARIBOU v0.3
-------------------

Loaded module 'dump'

Dumping CAN traffic (press Ctrl+C to exit)
Timestamp: 1549719604.410814        ID: 0221    S                DLC:  5    12 34 56 78 87              Channel: can0
Timestamp: 1549719604.910661        ID: 0221    S                DLC:  5    12 34 56 78 87              Channel: can0

eingibt. Wenn jetzt CAN-Botschaften angezeigt werden, ist alles in Ordnung.

Tipps / Beispiele

OBD-Scanning

python3  cc.py dcm discovery -min 0x700 -nostop       # versucht ab 0x700..0x7FF eine Diagnositzung zu öffenen

danach kann man dan veruchen welche Service unterstützt werden:

python3  cc.py dcm services 0x773 0x7DD
- besser wäre hier aber die Broadcast 7DF bzw Motor-ECU 7E0  mit response ID 7E8

oder mit uds_fuzz arbeiten.

 python3 cc.py uds_fuzz delay_fuzzer 100311022701 0x03 0x773 0x7DD    #1003, 1102, 2701 Request senden

Eigenes Python Skript um alle Anfrage zu senden:

cat obd_pid_scan_andi.py                                                 
#!/usr/bin/python3                                                       
                                                                         
import can                                                               
import time   # wenn man zyklish was senen will                          
                                                                         
# scand PIDs ohne die Support Adressen                                   
                                                                         
bus = can.interface.Bus(bustype='socketcan', channel='can0', bitrate=500000)                                                                      
                                                                         
msg = can.Message(arbitration_id=0x7E0, data=[2, 1, 0, 0, 0, 0, 0, 0], extended_id=False)                                    
bus.send(msg)                                                            
                                                                         
for i in range(256):                                                     
  if ( ((i%0x20)==0)):                                                   
     print ( "ID: 0x%03X not send  (supported IDs)" % (i))               
     continue                                                            
                                                                         
  msg.data[2]=i                                                          
  bus.send(msg)                                                          
  print(msg)                                                             
  time.sleep(0.1)                                                        

print("fertig")                                                          

Dies Skript starten und schauen was candump:

candump -L can0,7E8:7FF

anzeigt.
Hinweis die Anfrage nach den Supported IDs wird unterdrückt.

DCM ist veraltet, dafür gibt es jetzt die UDS-Module:

VIN anfordern entweder über Service 09 oder über UDS-Anfrage: 03 22 F1 91 (Pam America)

Hmm, warum ist es jetzt hier auch: https://githubmemory.com/index.php/repo/CaringCaribou/caringcaribou