Daten|teiler
Kopieren als Kulturtechnik

Mobiles Python II

6. November 2007 von Christian Imhorst

Ich habe zwar immer noch keine Ahnung, ob ich es jemals gebrauchen werde, aber immerhin kann ich jetzt die Python-Konsole meines Nokia E65 (S60-Serie) über Bluetooth mit meinem Gnu/Linux-Rechner verbinden. Im August habe ich im ersten Teil Mobiles Python darüber geschrieben, wie man das mit dem Terminal von MacOS X schaffen kann. Nun kommt der lang ersehnte zweite Teil, in dem ich zeige, wie das Ganze mit einem weiteren Unix-artigen Betriebssystem funktioniert. Zum Testen habe ich diesmal Ubuntu 7.10 „Gutsy Gibbon“ genommen, das ich meiner Freundin Carola zuliebe auf unseren PC installiert habe, den wir gemeinsam nutzen. Mit anderen Linux-Distributionen dürfte das aber genauso funktionieren.

Zuerst braucht man folgende Programmpakete, falls sie noch nicht installiert sein sollten:

  • bluez-hcidump
  • cu

Bei einem Debian-ähnlichen Betriebssystem wie Ubuntu kann man einen Paketmanager wie aptitude verwenden, um die Pakete zu installieren.

sudo aptitude install bluez-hcidump cu bluez-utils

Nachdem erfolgreich installiert wurde, sollte man ersteinmal schaun, ob Bluetooth richtig installiert ist, indem man nach vorhandenen Geräten scannt:

sudo modprobe bluetooth hci_usb
sudo /etc/init.d/bluetooth restart
hcitool scan
Scanning ...
        00:17:E4:10:93:3A       Christians-E65

Super, das Handy wird schonmal erkannt. Dann muss man sich nur noch über die Bluetooth-Konsole einloggen. Voraussetzung dafür ist natürlich, dass Python auf dem Handy der S60-Serie installiert worden ist, wie im ersten Teil beschrieben.

sdptool add --channel=3 SP
rfcomm listen /dev/rfcomm0 3

Das Bluetooth-Protokoll RFCOMM emuliert an /dev/rfcomm0 eine serielle Schnittstelle, von der aus auf Kanal 3 gelauscht wird, ob ein weiteres Bluetooth-Gerät bereit ist. Jetzt muss im Python-Terminal des Telefons die Bluetooth console gestartet werden. Die Konsole sucht automatisch nach dem nächstbesten Gerät, mit dem es sich verbinden kann, und bietet dazu die lauschende Schnittstelle auf dem Gnu/Linux-PC an. Im Terminal erscheint jetzt

rfcomm listen /dev/rfcomm0 3
Waiting for connection on channel 3
Connection from 00:17:E4:10:93:3A to /dev/rfcomm0
Press CTRL-C for hangup

und die Shell ist blockiert. Um die Verbindung mit cu zu startet öffnet man ein neues Terminal und kann loslegen:

cu -l /dev/rfcomm0
Connected.
>>>

Die Python-Konsole auf meinem E65 wird nun von meinem Linux-Rechner quasi „ferngeteuert“. Über die Konsole kann ich Befehle an das Telefon schicken und schauen, was auf dem Handy-Display passiert:

import appuifw
appuifw.note(u'Hallo Welt. ;-)', 'info')

Sollte die Verbindung nicht zustande kommen und stattdessen die Fehlermeldung

cu: open (/dev/rfcomm0): Permission denied
cu: /dev/rfcomm0: Line in use

ständig erscheinen, versucht man vermutlich gerade, sich als Root oder mit sudo als Super-User mit dem Handy zu verbinden. Das klappt nicht. Man muss dazu (ausnahmsweise mal) normaler Nutzer sein.

Geschrieben in Gnu/Linux, Programmieren, Python