[ create a new paste ] login | about

Link: http://codepad.org/l1ybCuOC    [ raw code | fork ]

greenarrow - Python, pasted on Sep 26:
#!/usr/bin/env python

# LGPLv2 yadda yadda yadda, do whatever, yadda yadda yadda, bum it in the gob, yadda yadda yadda

import bluetooth, datetime, optparse, time, os, user, pynotify, tempfile, twitter, sys

# Install required packages on Ubuntu:
# sudo aptitude install python-twitter python-notify python-bluetooth festival

# Set these values if you wish to use Twitter (you probably won't, but then I didn't really want too but it happended anyway)
twitter_username = ''
twitter_password = ''


def speak_text(text):
	"""Shell out to festival and mplayer to speak out text over sound system"""
	tf = tempfile.NamedTemporaryFile(delete=False)
	textfile = tf.name
	tf.write(text)
	tf.close()
	
	wavefile = textfile + '.wav'	
	os.system( 'text2wave -o %s %s' % (wavefile, textfile) )
	os.remove(textfile)
	os.system('mplayer %s' % wavefile)
	os.remove(wavefile)


if __name__ == '__main__':
	
	# Have a gander at the options
	parser = optparse.OptionParser()
	parser.add_option('-p', '--period', dest='period', default=10, help='Pause between scans')
	parser.add_option('-t', '--notification-timeout', dest='notification_timeout', default=10, help='Timeout for desktop notifications')
	parser.add_option('-s', '--speak', dest='speak', action='store_true', default=False, help='Speak names using festival and mplayer')
	parser.add_option('-w', '--twitter', dest='twitter', action='store_true', default=False, help='Upload names to twitter')
	
	options, args = parser.parse_args()
	
	# Initialise the bluetooth module
	if not pynotify.init("bluesearch"):
		parser.error("something went a bit wrong with initialising notify, sorry")
		sys.exit()
	
	# We keep a list of the last found MAC addresses here so we know when we have found new ones.
	last_macs = set( [] )
	
	print "starting bluesearch"
	
	# authenticate twitter if required
	if options.twitter:
		twit = twitter.Api(username=twitter_username, password=twitter_password) 
	
	
	# Loop until terminated
	while True:
		
		print "searching for devices..."
		
		try:
			# Search for devices
			devices = bluetooth.discover_devices(lookup_names=True)
		except:
			print "could not connect to bluetooth (or no devices found)"
		else:
			
			if len(devices):
				
				
				# Get a set of mac current addresses
				macs = set( [ mac for mac, name in devices ] )
				
				# See which ones have appeared since the last scan
				new_macs = list(macs - last_macs)
				
				if len(new_macs):
					print "new devices found:"
				
				# Display a notification for each 
				for mac in new_macs:
					name = dict(devices)[mac]
					
					print '\t%s' % name
					
					# Make a desktop notification
					n = pynotify.Notification(name, mac)
					n.set_timeout(options.notification_timeout)
					n.show()
					
					# Speak the text if required
					if options.speak:
						speak_text(name)
					
					# Post to twitter if required
					if options.twitter:
						try:
							twit.PostUpdate(name)
						except:
							twit = twitter.Api(username=twitter_username, password=twitter_password) 
							try:
								twit.PostUpdate(name)
							except:
								print "twitter error"
					
				last_macs = macs
		
		# Wait a bit
		print "waiting %d seconds..." % options.period
		time.sleep(options.period)


Create a new paste based on this one


Comments: