Servidor Bluetooth con Python 3.3

Python 3.3 vino con soporte nativo para sockets bluetooth. Desafortunadamente, aún no está muy bien documentado (solo hay una mención en la documentación ).

En Google, hay una publicación de blog sobre la implementación de un cliente, pero no pude encontrar nada sobre la creación de un servidor.

Más específicamente, cómo establecer el nombre fácil de usar y anunciar el servicio.

Entonces, algo como

import socket serverSocket = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM) serverSocket.setTimeout(1) serverSocket.bind(("", 1)) serverSocket.listen(1) something.advertise_service(something something) 

¿Algunas ideas?

Malas noticias : Python no parece ser compatible con lo que quieres hacer fuera de la caja. (Al menos no en socketmodule.c ).

La mayoría de los usuarios de python / bluetooth que he visto utilizan pybluez aunque no se ha actualizado desde 2009.

Buenas noticias : revisé su fuente (para conexiones de Linux) y encontré los bits relevantes para los servicios de publicidad. La mayor parte del código está esencialmente copiado y pegado de la versión python 2.2 de socketmodule.c .

pybluez define alguna funcionalidad adicional para que un objeto de socket implemente todas esas funciones de Bluetooth. No tiene un nivel demasiado bajo y, en cambio, depende de BlueZ para eso. Por lo que puedo decir, básicamente toma objetos de Python y crea las estructuras de datos esperadas por BlueZ y solo llama a eso. Si no quiere / no puede usar pybluez , tendrá que implementar de alguna manera esta funcionalidad faltante. Creo que puedes hacerlo con c-tipos. Las partes relevantes para anunciar el servicio se encuentran en btmodule.c , líneas 2562-2642.

Hay una twig de python-3 en la fuente de pybluez , aunque no sé si funciona o no.

Si decides usar pybluez , un ejemplo tomado de su fuente

 server_sock=BluetoothSocket( RFCOMM ) server_sock.bind(("",PORT_ANY)) server_sock.listen(1) port = server_sock.getsockname()[1] uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee" advertise_service(server_sock, "SampleServer", service_id = uuid, service_classes = [ uuid, SERIAL_PORT_CLASS ], profiles = [ SERIAL_PORT_PROFILE ], ) 

A medida que el código de Google se está cerrando, el código también se puede encontrar en github aquí .