Daten|teiler
Kopieren als Kulturtechnik

Mit Gnu/Linux für PyS60 entwickeln

16. März 2010 von Christian Imhorst

Ped ist eine komfortable Entwicklungsumgebung für Python auf einem S60-Handy (PyS60) und eignet sich sehr gut für das Entwickeln unterwegs. Zu Hause möchte ich aber lieber meinen Computer zum Programmieren benutzen. Über die Bluetooth-Konsole bekommt man zwar ein Terminal, mit dem man Anweisungen über den PC auf dem Handy ausführen kann, es eignet sich aber nicht dazu, ganze Programme zu testen. Es ist nämlich ganz schön ermüdend, wenn man das Skript am Computer schreibt, es mehrmals über USB oder Bluetooth auf das Telefon überträgt, um es dann dort mit der Python-Shell zu starten. Einfacher und schneller geht es mit den PUTools.

Die PUTools installieren

Ich habe PUTools unter Ubuntu 9.10 installiert, was wirklich nicht sehr schwer war. Unter Karmic Koala benötigt man im Prinzip nur python-serial, alles andere dürfte schon installiert sein:

sudo apt-get install python-serial

Anschließend benötigt man die PUTools, die man am besten in sein Home-Verzeichnis entpackt. Daher wird nun davon ausgegangen, dass die Dateien in ~/putools liegen. Danach muss man die Datei ~/putools/pcfiles/sync.config konfigurieren, indem man unter der Variable COM_PORT seinen bevorzugten Bluetooth-Port einträgt:

COM_PORT = '/dev/rfcomm0'

Außerdem sollten noch Port und Kanal von RFCOMM unter /etc/bluetooth/rfcomm.conf definiert werden:

#
# RFCOMM configuration file.
#
 
rfcomm0 {
	# Automatically bind the device at startup
	bind no;
 
	# Bluetooth address of the device
	device 00:11:22:33:44:55;
 
	# RFCOMM channel for the connection
	channel	3;
 
	# Description of the connection
	comment "E71";
}

Die Device-Nummer des Gerätes erfährt man mit dem Befehl hcitool scan:

christian@Unaha-Closp:~$ hcitool scan
Scanning ...
	 00:11:22:33:44:55	Emil71

Nun muss noch das Telefon vorbereitet werden. Damit Handy und PC sich kennenlernen, muss man sie bekannt machen (Pairing). Das erledigt man am Besten mit dem Bluetooth-Applet in Gnome, in dem man die Datei ~/putools/phpush.py in das Verzeichnis E:\Python auf der Speicherkarte des Handys überträgt. Außerdem müssen noch die Dateien im Ordner ~/putools/libs/ nach E:\Python\lib kopiert werden.

Das ganze ohne Applet

Wer kein Gnome oder kein Bluetooth-Applet zur Verfügung hat, kann das Ganze auch zu Fuß im Terminal machen. Dazu muss aber obexftp installiert sein:

sudo apt-get install obexftp

Ob eine Bluetooth-Verbindung mit obexftp sauber funktioniert, kann man erstmal mit folgendem Kommando testen:

obexftp -b 00:11:22:33:44:55  -l

Die Option -b besagt, dass ObexFTP über Bluetooth auf das Telefon zugreifen soll, danach folgt dessen Bluetooth-ID mit der Option -l zum Auflisten des Ordnerinhalts. Die Ausgabe des Befehls sollte also die oberste Verzeichnisstruktur des Handys zeigen. Falls das nicht klappt, und das Handy nach einer PIN für die Bluetooth-Verbindung verlangt, muss man den PIN erstmal als Superuser Root vereinbaren:

sudo -s
echo "00:11:22:33:44:55 1234" > /var/lib/bluetooth/11\:AA\:22\:BB\:33\:CC/pincodes

Nachdem man mit dem Befehl sudo -s in die Root-Shell geschlüpft ist, hinterlegt man nach folgendem Schema den PIN:

echo "<Bluetooth-ID Handy> <PIN>" > /var/lib/bluetooth/<Bluetooth-ID PC>/pincodes

Die Bluetooth-ID des Handys ermittelt man mit hcitool scan, wie schon weiter oben gezeigt, für die Bluetooth-ID des PCs reicht ein ls -l /var/lib/bluetooth aus. Den PIN kann man frei wählen, in diesem Fall ist es 1234, und wird in der Datei pincodes hinterlegt. Wenn das Handy wieder nach der PIN zur Bestätigung einer Bluetooth-Verbindung fragt, gibt man in diesem Fall 1234 ein.

Zurück als normaler User kann man dann die Datei phpush.py auf das Handy kopieren:

~/putools$ obexftp -b 00:11:22:33:44:55 -c E: -c Python -p phpush.py

Dabei steht die Option -c für den Pfad zum Ordner, in dem die Datei abgespeichert werden soll. Na gut, genauer gesagt wird das Arbeitsverzeichnis auf dem Telefon gesetzt, was in diesem Fall E:\Python ist. Mit der Option -p wird die Datei phpush.py an den Ordner Python auf Laufwerk E:, was in diesem Fall die Speicherkarte ist, gesendet. Dann fehlen noch die Dateien im Ordner ~/putools/libs/, die nach E:\Python\lib kopiert werden sollen:

~/putools$ obexftp -b 00:11:22:33:44:55 -c E: -c Python -C lib -p libs/*.py

Mit der Option -C legt ObexFTP den neuen Ordner \lib an, falls er noch nicht vorhanden ist.

Weiter mit PHPush

Wenn das erledigt ist, startet man Push, die Python Utility Shell:

~/putools$ cd pcfiles/
~/putools$ rfcomm listen /dev/rfcomm0 3 ./push

Dazu wechselt man zuerst in das Verzeichnis pcfiles/, in dem das Programm push liegt. 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. Daher ist es jetzt an der Zeit, die PyS60-Shell auf dem Telefon zu starten und das Programm phpush.py zu laden. Nachdem man den eigenen Rechner als Gegenstelle ausgewählt hat, startet push und man hat eine simple Python-Shell auf dem Desktop, deren Befehle auf dem Handy ausgeführt werden.

Das scheint sich erstmal nicht großartig von der „normalen“ Bluetooth-Konsole zu unterscheiden, hat aber mit den Shell-Kommandos sync und run einen entscheidenden Vorteil: Der Upload ist einfacher und man muss seine Skripte zum Testen nicht mehr umständlich über das Telefon starten. Das Skript kann einfach im Ordner ~/putools erstellt und dann mit dem Befehl sync in Push auf das Telefon übertragen werden. Nach Abschluss der Synchronisation startet man das Skript mit dem Befehl run test.py, was man auch auf dem Bild oben sehen kann.

Geschrieben in Gnu/Linux, Python