Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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)
Add Comment
Please, Sign In to add comment