Showing posts with label pybluez. Show all posts
Showing posts with label pybluez. Show all posts

Tuesday, November 29, 2011

Scan for bluetooth devices using python

scan for bluetooth devices using a python script. the below script can be used for performing the same. remember , you will have to install pybluez module (it is available for both windows and linux). now for the script , here you go!

import bluetooth

print "performing inquiry..."

nearby_devices = bluetooth.discover_devices(lookup_names = True)

print "found %d devices" % len(nearby_devices)

for addr, name in nearby_devices:
print " %s - %s" % (addr, name)


this will print the number of devices , address and name . this can be used as test script for a variety for reasons .

Monday, November 7, 2011

AT Commands Python

You can send AT commands to phone when connected to pc via the below progaram . i was able send the commands successfully. Remember most of the phones will have the DUN port open , if you don't connect the machine to a Linux box and run hciconfig command to see the configurations. if you dont have a linux box , just use a virtual box application and download ubuntu which is free of cost

in the case of a android phone , i made use of an application called padNEt 3.02 which helps you turn on the DUN port.

you can use the below mentioned code to send AT commands over bluetooth too. identify the appropriate profile and sent id accordingly.

#!/usr/bin/env python

# ATsend.py
#
# Turn the phone bluetooth off and on each time you
# send the At commands to free up the DUN port
#
# Requires Pybluez from Google
# http://pybluez.googlecode.com
# PyBluez works on GNU/Linux and Windows XP (Microsoft and Widcomm Bluetooth stacks)
#
# Send At commands to mobile device via DUN
#
# Some code to show how to dial a number with
# AT commands also shown below
#

import sys
import bluetooth
from bluetooth import * #Pybluez http://pybluez.googlecode.com

deviceName = []
deviceAddress = None
foundDevices = bluetooth.discover_devices()
if len(foundDevices) == 0:
print "No Bluetooth device found"
exit(0)
count = 0
while count == 0:
for bdaddr in foundDevices:
deviceName.append(bluetooth.lookup_name( bdaddr ))
deviceAddress = bdaddr
print "%2d %-16s Address: %s" % (count +1, deviceName[count], deviceAddress)
count += 1
choice = raw_input("Choose Device or 0 to repeat scan")

# Repeat scan to get more device names
if (choice.isdigit() and int(choice) <= len(foundDevices)):
count = int(choice)
else:
print "Invalid Choice - Please rerun the program"
exit(0)
# choice = raw_input("Choose Device or 0 to repeat scan")
# if (choice.isdigit() and int(choice) <= len(foundDevices)):
# count = int(choice)
#if choice == 0:
# while count == 0:
# for bdaddr in foundDevices:
# deviceName.append(bluetooth.lookup_name( bdaddr ))
# deviceAddress = bdaddr
# print "%2d %-16s Address: %s" % (count +1, deviceName[count], deviceAddress)
# count += 1
# choice = raw_input("Choose Device or 0 to repeat scan")

selected = deviceName[count -1]
deviceAddress = foundDevices[count -1]

if deviceAddress is not None:
print "Identifying the services for the selected devices ....."
else:
print "Could not find a Bluetooth device"
exit(0)

services = bluetooth.find_service(address=deviceAddress)
devicename = bluetooth.lookup_name(deviceAddress, timeout=10)
showProfiles = None

if len(services) > 0:
print "Found %d services on %s\n" % (len(services), deviceAddress)
#
else:
print "No device found at address: %s" % deviceAddress
print
print "Did you turn on bluetooth?"
print "Did you accept/authorize the connection?"
print
sys.exit(3)

dunPort = 0 # Not found yet
# Get Service Details
# global showProfiles
showProfiles = raw_input("Show Bluetooth Profiles supported? y|n")
for svc in services:
# Look for DUN port
if svc["name"] == "Dial-up networking (DUN)":
dunPort = svc["port"]
if showProfiles == "y":
print "BT Profile: %s" % svc["name"]
print " Host: %s" % svc["host"]
print " Description: %s" % svc["description"]
print " Provided By: %s" % svc["provider"]
print " Protocol: %s" % svc["protocol"]
print " channel/PSM: %s" % svc["port"]
print " svc classes: %s "% svc["service-classes"]
print " profiles: %s "% svc["profiles"]
print " service id: %s "% svc["service-id"]
print

if dunPort != 0:
print "Found Dial-Up Networking port = %d\n" % (dunPort)

#s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
#conn = s.connect((deviceAddress, dunPort))
sock=BluetoothSocket( RFCOMM )
sock.connect(("78:47:1D:B6:01:B2", dunPort))
print "socket connected"
# A semicolon ";" at the of the number dialed
# is necessary to make a voice call
# with out the ";" this command will try to
# make a data call

# Example to Dial a number using AT command

#s.send('AT#QAS\r'),
#print s.recv(1024),


# This next section has to expect the correct number of returns
# The first command "ATE1" gets a single "OK" response with a carrage return
# The next commands expects 2 lines returned.
# Each line return ends with \r
# The correct send/expect sequence must be followedd or you will get
# a hang or no response.

#s.send("ATE1\r")
#print s.recv(1024),
s.send("AT\r")
print s.recv(1024)

#s.send("AT+CMGF=1\r")
#print s.recv(1024)
#print s.recv(1024)

#s.send('AT+CMGS="0784XXXXXXX"\r')
#print s.recv(1024)
#s.send("This is freds test!"+chr(26))
#print s.recv(1024)
#print s.recv(1024)

#s.send("AT+GMI\r")
#print s.recv(1024),
#print s.recv(1024),

#s.send("AT+CGMI\r")
#print s.recv(1024),
#print s.recv(1024),

#s.send("AT+GMM\r")
#print s.recv(1024),
#print s.recv(1024),

#s.send("AT+CGMM\r")
#print s.recv(1024),
#print s.recv(1024),

s.close
sys.exit(0)

else :
print "Could not find Dial Up Networking port."
print "Or DUN port is busy."
print "Switch the target's Bluetooth off then on and retry"
sys.exit(4)

Wednesday, July 13, 2011

pybluez - bluetooth

For all who have been using python or who wanted to use python,
we can access RFCOMM profile via pybluez.
pybluez is the software supplied at code.google.com is a python wraper for bluetooth testing.
for now all the profiles are not supported ( read bluetooth related books/ postings for you to understand what profiles mean) . it supports only RFCOMM and L2CAP.
you can download it from the below.

http://code.google.com/p/pybluez