Получение ответа от устройства Bluetooth - PullRequest
3 голосов
/ 01 июня 2009

Я пытаюсь написать простой модуль, который позволит отправлять SMS. Я использую Bluetooth для подключения к мобильному телефону, используя приведенный ниже пример:

файл: bt-sendsms.py

import bluetooth

target = '00:32:AC:32:36:E8' #  Mobile address 
print "Trying to send SMS on %s" %  target

BTSocket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
BTSocket.connect((target, 2)) # BT Address
BTSocket.send('ATZ\r')
BTSocket.send('AT+CMGF=1\r')
#sockfd.send('AT+CSCA="+972547716507"\r') # This line changes the SMSC address - do not modify unless required 
BTSocket.send('AT+CMGS="+972547877763"\r') # TO Phone Number
BTSocket.send('This is a test message - port 2.\n')
BTSocket.send(chr(26)) # CTRL+Z

print "SMS sent"
sockfd.close()
print "Closed" 

Моя проблема в том, что я не могу проверить или получить код ошибки для отправки SMS или какой-либо операции с сокетом.

Любое направление в правильном направлении будет оценено

1 Ответ

3 голосов
/ 01 июня 2009

С Python вы выглядите так, будто открываете любой старый канал RFCOMM и надеетесь, что он волшебным образом примет команды AT и отправит сообщение.

Я думаю (и могу ошибаться), что вам нужно подключиться к определенному профилю / служебному каналу, и я думаю, что для SMS это профиль доступа к сообщениям (MAP), который еще не стандартизирован, поэтому поиск телефона с это, ну, я не скажу невозможное, но очень, очень маловероятно. В противном случае некоторые телефоны будут поддерживать AT-команды для обмена сообщениями, но это выходит за рамки спецификации, например, Я уверен, что телефоны Sony-Ericson будут поддерживать его через профиль удаленного доступа к сети (DUN).

Итак, в первую очередь, поддерживает ли ваше мобильное устройство некоторые специальные AT-команды для SMS, и если да, то в определенном профиле или в специальном проприетарном? Далее вам необходимо подключиться к этому профилю.

Вы можете просматривать поддерживаемые сервисы и т. Д., Используя следующий Python (проверяет все окружающие устройства BT) ...

import bluetooth

def whats_nearby():
    name_by_addr = {}
    nearby = bluetooth.discover_devices(flush_cache=True)
    for bd_addr in nearby:
        name = bluetooth.lookup_name( bd_addr, 5)
        print bd_addr, name
        name_by_addr[bd_addr] = name
    return name_by_addr

def what_services( addr, name ):
    print " %s - %s" % ( addr, name )
    for services in bluetooth.find_service(address = addr): 
        print "\t Name:           %s" % (services["name"]) 
        print "\t Description:    %s" % (services["description"]) 
        print "\t Protocol:       %s" % (services["protocol"]) 
        print "\t Provider:       %s" % (services["provider"]) 
        print "\t Port:           %s" % (services["port"]) 
        print "\t service-classes %s" % (services["service-classes"])
        print "\t profiles        %s" % (services["profiles"])
        print "\t Service id:  %s" % (services["service-id"]) 
        print "" 

if __name__ == "__main__":
    name_by_addr = whats_nearby()
    for addr in name_by_addr.keys():
        what_services(addr, name_by_addr[addr])

Как только вы найдете правильный сервис / профиль, вашей следующей проблемой будет согласование безопасности (пин-код для сопряжения), что я еще не выяснил, как это сделать!

См. www.bluetooth.org для всех ваших потребностей Bluetooth!

...