Mobiles Python II
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