Hallo,
ich möchte von meinem Nokia Series 60-Handy (Nokia 6630) aus eine Verbindung zu meinem PC herstellen und so zum Beispiel den Media-Player Amarok oder den vlc-Player steuern.
Leider bin ich bei diesem Programm noch ganz am Anfang und brauche eine kleine Starthilfe.
Ich verwende auf dem Handy "Python for Series 60" (http://forum.nokia.com/python) und auf dem Linux-Rechner Python mit pyBluez
Was ich bis jetzt geschafft habe: Ich habe eine Bluetooth-RFCOMM-Verbindung vom Handy zum PC aufgebaut (und auch umgekehrt) und kann schon einzelne Nachrichten schicken.
Was ich aber eigentlich machen will: Ich will vom Handy aus zum Computer einen Befehl senden (z.B. amarok showtitle), der PC soll darauf reagieren und den entsprechenden Titel zum Handy zurück senden.
Also so:
PC: RFCOMM-Server läuft
Handy: Öffnet eine Bluetooth-Verbindung zum PC und sendet "amarok Showtitle"
PC: reagiert darauf und sendet zurück: "foobar - blablabla"
Handy: empfängt den Titel und zeigt ihn an
Ich weiß aber nicht, wie ich es machen soll dass der Computer Server und Client zugleich ist (also Daten empfangen und die Antwort darauf senden kann)
Hat schon jemand etwas ähnliches gemacht oder kann mir irgendjemand anderer halfen?
PS: Ich bin neu in diesem Forum. Ich habe die Suche und Google benützt, konnte aber nicht das Richtige finden. Ich habe es in das Forum "Allgemeine Fragen" geschrieben, weil ich sonst nichts passendes gefunden habe.
Ich bin für jede Hilfe dankbar,
mfg LukasHetzi
Remote über Bluetooth von meinem Handy (Series 60) zum PC
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Braucht er nicht. Auch Clients dürfen daten an den Server schicken. Sonst wäre sowas wie IRC unmöglich.LukasHetzi hat geschrieben:Ich weiß aber nicht, wie ich es machen soll dass der Computer Server und Client zugleich ist (also Daten empfangen und die Antwort darauf senden kann)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 14
- Registriert: Donnerstag 25. Januar 2007, 12:01
Danke, hast du oder irgendjemand anderes ein Beispielscript für eine solche Bluetooth-Verbindung?Leonidas hat geschrieben:Braucht er nicht. Auch Clients dürfen daten an den Server schicken. Sonst wäre sowas wie IRC unmöglich.LukasHetzi hat geschrieben:Ich weiß aber nicht, wie ich es machen soll dass der Computer Server und Client zugleich ist (also Daten empfangen und die Antwort darauf senden kann)
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja. Hier gibt es Informationen und da ist ein 77-Seitiges PDF verlinkt, welches eine BT-EInführung bietet. Außerdem noch An Introduction to Bluetooth programming in GNU/Linux wo auch die Python-Seite beschrieben wird.LukasHetzi hat geschrieben:hast du oder irgendjemand anderes ein Beispielscript für eine solche Bluetooth-Verbindung?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 14
- Registriert: Donnerstag 25. Januar 2007, 12:01
Hallo,
ich habe das Beispiel von pyBluez für den Aufbau einer l2cap-Verbindung auf RFCOMM umgeschrieben und wollte nun GTK entfernen, da ich es später nicht brauchen werde.
Der Code sieht jetzt so aus.
Wenn ich das Programm so ausführe wartet es auf eine Bluetooth-Verbindung.
Entferne ich allerdings "import gtk" und "gtk.main()" so wird es nach dem Starten sofort wieder beendet. Ich hab also keine Möglichkeit vom handy aus eine Verbindung herzustellen.
ich habe das Beispiel von pyBluez für den Aufbau einer l2cap-Verbindung auf RFCOMM umgeschrieben und wollte nun GTK entfernen, da ich es später nicht brauchen werde.
Der Code sieht jetzt so aus.
Code: Alles auswählen
#!/usr/bin/python
import os
import sys
import time
import gtk
import bluetooth
class BluezChatGui:
def __init__(self):
print "called init"
self.peers = {}
self.sources = {}
self.addresses = {}
# the listening sockets
self.server_sock = None
def scan(self):
newdevs = bluetooth.discover_devices()
self.discovered.clear()
for addr in newdevs:
name = bluetooth.lookup_name(addr)
if not name:
name = "[unknown]"
self.discovered.append( [ addr, addr, name ] )
# self.add_text("\ndiscovered [%s]" % addr)
def send(self, text):
#text = "str"
if len(text) == 0: return
for addr, sock in self.peers.items():
sock.send(text)
print "sending", text, "to", self.peers.items()
# --- network events
def incoming_connection(self, source, condition):
sock, info = self.server_sock.accept()
address, psm = info
print "accepted connection from ", str(address)
# add new connection to list of peers
self.peers[address] = sock
self.addresses[sock] = address
self.sources[address] = source
self.send("hello")
return True
def data_ready(self, sock, condition):
address = self.addresses[sock]
data = sock.recv(1024)
if len(data) == 0:
print "lost connection with ", address
gobject.source_remove(self.sources[address])
del self.sources[address]
del self.peers[address]
del self.addresses[sock]
sock.close()
else:
print "Nachricht von ", address, ": ", str(data)
if data == "hi":
self.send("hi too")
return True
# --- other stuff
def cleanup(self):
print "called cleanup"
self.hci_sock.close()
def connect(self, addr):
sock = bluetooth.BluetoothSocket( bluetooth.RFCOMM )
try:
sock.connect((addr, 17))
except bluez.error, e:
print "Bluez error: ", str(e)
sock.close()
return
self.peers[addr] = sock
self.sources[addr] = source
self.addresses[sock] = addr
def start_server(self):
self.server_sock = bluetooth.BluetoothSocket( bluetooth.RFCOMM )
self.server_sock.bind(("",17))
self.server_sock.listen(5)
uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"
bluetooth.advertise_service( self.server_sock, "FooBar service",
service_id = uuid,
service_classes = [ uuid, bluetooth.SERIAL_PORT_CLASS ],
profiles = [ bluetooth.SERIAL_PORT_PROFILE ] )
def run(self):
print "starting server.."
self.start_server()
gtk.main()
print "loading gui"
gui = BluezChatGui()
gui.run()
Entferne ich allerdings "import gtk" und "gtk.main()" so wird es nach dem Starten sofort wieder beendet. Ich hab also keine Möglichkeit vom handy aus eine Verbindung herzustellen.
Zuletzt geändert von LukasHetzi am Samstag 27. Januar 2007, 18:56, insgesamt 1-mal geändert.
@LukasHetzi:
http://www.python-forum.de/faq.php#21
http://www.python-forum.de/faq.php#21
-
- User
- Beiträge: 14
- Registriert: Donnerstag 25. Januar 2007, 12:01
Okay. schon geändertsape hat geschrieben:@LukasHetzi:
http://www.python-forum.de/faq.php#21
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Natürlich, was erwartest du denn? GTK schaltet in eine Mainloop, die das Programm in der Dauerschleife laufen lässt. Entfernst du diese Schleife, kommt es zu keiner einzigen Interation und das programm beendet sich.LukasHetzi hat geschrieben:Entferne ich allerdings "import gtk" und "gtk.main()" so wird es nach dem Starten sofort wieder beendet.
Sieh dir mal den Code an:
Code: Alles auswählen
class MyClass(object):
def __init__(self):
print 'started'
def run(self):
# do nothing
pass
myclass = MyClass()
myclass.run()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 14
- Registriert: Donnerstag 25. Januar 2007, 12:01
Hallo,
ich verstehe schon dass dein Beispielcode gleich beendet wird.
Aber gibt es eine - ausser gtk - noch eine Möglichkeit eine Mainloop zu erzeugen? Ich habe es schon mit einigen while-Schleifen versucht, jedoch ohne Erfolg.
ich verstehe schon dass dein Beispielcode gleich beendet wird.
Aber gibt es eine - ausser gtk - noch eine Möglichkeit eine Mainloop zu erzeugen? Ich habe es schon mit einigen while-Schleifen versucht, jedoch ohne Erfolg.
In prozeduralen Programmiersprachen verwendet man üblicherweise folgenden Konstrukt:LukasHetzi hat geschrieben:Hallo,
ich verstehe schon dass dein Beispielcode gleich beendet wird.
Aber gibt es eine - ausser gtk - noch eine Möglichkeit eine Mainloop zu erzeugen? Ich habe es schon mit einigen while-Schleifen versucht, jedoch ohne Erfolg.
Code: Alles auswählen
<Initialisierung>
while True:
<Aktion 1>
<Aktion 2>
(...)
<Aktion n>
if <Abbruchbedingung>:
break;
<Aufräumen>