RaspberryPi CAN-BUS (python-can)

#4148447
Lesenswert?

Hallo zusammen,

wie ich bereits vor einigen Wochen in einem anderen Beitrag 
(Beitrag "RaspberryPiB+ mit CAN (MCP2515)") berichtet habe, bin ich 
an einer Hausautomatisierung über CAN-BUS beschäftigt.
Letztes mal hatte ich Probleme mit dem Ansprechen eines MCP2515 über den 
RaspberryPi. Diese Problem habe ich dank der Hilfe im Forum lösen 
können. Jetzt (nach einigen Wochen) habe ich wieder etwas Zeit an meinem 
Projekt zu basteln. Bei meinem Versuch den CAN-BUS über Python 
anzusteuern scheitere ich allerdings schon wieder nach kurzer Zeit.

Die Hardware am Raspberry funktioniert jetzt problemlos, ein abfragen 
oder ausgeben von Werten an den CAN über das Terminal funktioniert!

Für die Integration in Python gibt es die Erweiterung "python-can", 
diese ich natürlich mit freudigen Erwartungen installiert habe.

Leider komme ich aber jetzt nicht mehr weiter... Alle meine 
Ansteuerungsversuche scheitern mit dem selben Fehler.
1
WARNING:root:Kvaser canlib is unavailable.
2
WARNING:root:Function was not found in library
3
...
4
...
5
WARNING:root:Function was not found in library
6
WARNING:root:Kvaser canlib is unavailable.
7
ERROR:can.socketcan.native:Note Python 3.3 or later is required to use native socketcan

Ich verwende Python 3.2. und werde das Gefühl nicht los, dass mein 
"can.conf" File ignoriert wird.
1
[default]
2
Interface = socketcan_ctypes
3
channel = can0

Was hat es mit de Kvaser canlib auf sich?
Kennt jemand "python-can" und hat es selbst schonmal verwendet?

Gruß
René
#4149950
Lesenswert?

Hallo,

ja Danke, lesen kann ich auch :D

Nur ist Kvaser eine von den 4 Möglichkeiten, die python-can unterstützt 
um mit dem CAN-BUS zu kommunizieren.

Laut python-can Anleitung "Interfaces":
kvaser,
socketcan,
serial,
oder pcan

da aber socketcan verwendet wird, sollte ich eigentlich kvaser nicht 
benötigen... (steht zumindest nichts davon in der 
Installationsanleitung)

Deswegen ja meine Frage "Was hat es mit Kvaser canlib auf sich?" 
(vielleicht etwas falsch formuliert)

Warum bekomme ich diese Meldung "Kvaser canlib is unavailable"?
Es wird ja laut can.conf das socketcan ausgewählt!
#4150279
Lesenswert?

René P. schrieb:
> ERROR:can.socketcan.native:Note Python 3.3 or later is required to use
> native socketcan

Das ist alles was Du wissen musst. Es geht mit 3.2 schlicht und 
ergreifend nicht. Zumindest nicht socketcan.

Am besten 3.2 komplett deinstallieren, ansonsten kommst Du sehr leicht 
durcheinander, welches Python Du gerade benutzt

sudo apt-get remove python3 python3-minimal python3.2 python3.2-minimal

Eine neuere Version von Python habe ich nach:
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=32&t=49023
installiert.

Wenn ich meine Aufzeichnungen richtig deute, habe ich dann Python 3.4 
installiert und keine eigenständigen Python-CAN-Packages. Ich glaube 
socketcan für Python war in den neueren Versionen von Python schon drin 
(??)
#4150312
Lesenswert?

Hallo Florian,

Danke für deine hilfreiche Antwort!
Werde es demnächst mit einer neueren Python Version testen..


Florian V. schrieb:
> Das ist alles was Du wissen musst. Es geht mit 3.2 schlicht und
> ergreifend nicht. Zumindest nicht socketcan.

Heißt ich habe die Installationsanleitung von python-can nicht ganz 
richtig verstanden... (so gut ist mein Englisch leider nicht)
1
Reasonably modern Linux Kernels (2.6.25 or newer) have an implementation of socketcan. This version of python-can will directly use socketcan if called with Python 3.3 or greater, otherwise that interface is used via ctypes.


PS:
Habe Heute nochmals direkt mit C ein kleines Programm geschrieben, 
dieses hat zumindest gleich funktioniert. Wobei für die ersten Versuche 
python etwas bequemer wären. Und da ich python bisher nicht kenne, 
wollte ich mich damit etwas beschäftigen...
#4151699
Lesenswert?

Danke Florian! Dein Tipp war goldwert...


Habe auf einem jungfräulichen System Python3.2 deinstalliert und 
anschließend genau wie in dem von dir beschriebenen Link Python3.3.2 
installiert. (Habe irgendwo gelesen dass ab Python3.3 Socketcan ohne 
jede zusätzliche Erweiterung funktioniert) --> hat sich bestätigt

Hier nochmals der Ablauf:
1
###Python3.2 deinstallieren
2
$ sudo apt-get remove python3 python3-minimal python3.2 python3.2-minimal
3

4
###Python3.3 herunterladen, kompilieren und installieren
5
$ wget http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.bz2
6
$ tar jxf ./Python-3.3.2.tar.bz2
7
$ cd ./Python-3.3.2
8
$ ./configure --prefix=/opt/python3.3.2
9
$ make && sudo make install
10

11
###Link auf Python3.3 erstellen
12
$ mkdir ~/bin
13
$ ln -s /opt/python3.3/bin/python ~/bin/py
14

15
###neustarten
16
sudo reboot
17

18
###can0 konfigurieren/aktivieren
19
$ sudo /sbin/ip link set can0 up type can bitrate 125000
20

21
###Die Grundsätzliche Funktion des CANBUS testen/sicherstellen (can-utils)
22
$ candump can0
23

24
##CANBUS mit beliebigem Python-Script testen
25
$ py cantest.py

Ich kann also bestätigen, für eine funktionierende Python -> CAN 
Anbindung wird nur Python > 3.3 benötigt.

Nochmals DANKE für die Unterstützung


Gruß
René

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren