def setState(): #MANDATORY FIELDS FROM REQUEST #DEVICE ID AS id #STATE TO ASSIGN TO DEVICE AS state device_id = bottle.request.params.get('id') # get device ID from request device_state = bottle.request.params.get('state') # get state to assign if HomerHelper.idCheck('Devices', device_id): # validate the ID device_function = HomerHelper.getDeviceFunction(device_id) state_location = HomerHelper.lookupDeviceAttribute(device_function, 'State') if state_location is not None: try: sql_update = "UPDATE `Devices` SET %s " % state_location # write it the same column in devices sql_update += "= %s WHERE id = %s" db.query(sql_update, (device_state, device_id)) #call state.action or scene here. TBD device_name = HomerHelper.getDeviceName(device_id) # lookup the name, needed for history device_type = HomerHelper.getDeviceType(device_id) # lookup the device type needed for history history_event = "set state to: " + device_state HomerHelper.insert_history(device_name, device_id, history_event) return "OK" except MySQLdb.IntegrityError: bottle.abort(400, "Doh! Device doesnt exist") else: bottle.abort(400, "device does not have state attribute") else: bottle.abort(400, "Doh! Device ID was not found") # lookup the device function
def removeDevice(): device_id = bottle.request.forms.get('id') if HomerHelper.idCheck('Devices', device_id): #validate the device ID device_name = HomerHelper.getDeviceName(device_id) try: db.query("DELETE FROM Devices WHERE id = %s", device_id) HomerHelper.insert_history(device_name, device_id, "device removed") return "OK" except MySQLdb.IntegrityError: bottle.abort(400, "Doh! Unable to remove device. ") else: bottle.abort(400,"Doh! " + device_id + " is not a valid ID or it is not enrolled in HOMEr")
def savePicture(): device_id = bottle.request.params.get('id') # get device ID from request picture_location = bottle.request.params.get('pictureURL') if HomerHelper.idCheck('Devices', device_id): # validate the ID try: file = urllib.urlopen(picture_location).read() sql_insert = 'INSERT INTO `Images`(`device_id`, `image`) VALUES (%s, %s)' db.query(sql_insert, (device_id, file)) device_name = HomerHelper.getDeviceName(device_id) # lookup the name, needed for history history_event = "stored picture from " + picture_location HomerHelper.insert_history(device_name, device_id, history_event) return "OK" except MySQLdb.IntegrityError: bottle.abort(400, "Doh! Device doesnt exist") except urllib2.URLError: bottle.abort(400, "failed to store image from source, check the url") else: bottle.abort(400, "Doh! Device ID was not found") # lookup the device function
def setColor(): device_id = bottle.request.params.get('id') device_color = bottle.request.params.get('color') device_state = bottle.request.params.get('mode') if HomerHelper.idCheck('Devices', device_id): # validate the ID device_name = HomerHelper.getDeviceName(device_id) device_type = HomerHelper.getDeviceType(device_id) device_function = HomerHelper.getDeviceFunction(device_id) state_location = HomerHelper.lookupDeviceAttribute(device_function, 'State') if state_location is not None: try: sql_update = "UPDATE `Devices` SET %s " % state_location # write it the same column in devices sql_update += "= %s WHERE id = %s" db.query(sql_update, (device_state, device_id)) except MySQLdb.IntegrityError: bottle.abort(400, "Doh! Device doesnt exist") color_location = HomerHelper.lookupDeviceAttribute(device_function, 'Color') if color_location is not None: try: sql_update = "UPDATE `Devices` SET %s " % color_location # write it the same column in devices sql_update += "= %s WHERE id = %s" db.query(sql_update, (device_color, device_id)) except MySQLdb.IntegrityError: bottle.abort(400, "Doh! Device doesnt exist") else: bottle.abort(400, "Device does not have color attribute") else: bottle.abort(400, "Device does not have mode attribute") DeviceComunication.sendDeviceColor(device_id, device_color, device_state) history_event = "set color to: " + device_color + "set mode to " + device_state HomerHelper.insert_history(device_name, device_id, history_event) return "OK" else: bottle.abort(400, "Doh! Device ID was not found")
def sendDeviceBrightness(device_id, device_type, brightness): if device_type == "imp": url = IMP_API urllib.urlopen(IMP_API + device_id + "?setbrightness= " + brightness) elif device_type == "hue": name = HomerHelper.getDeviceName(device_id) logging.debug("HUE brightness being set to " + str(brightness)) if int(brightness) == 0: Greenlet.spawn(b.set_light,name, 'on', False) else: Greenlet.spawn(b.set_light, name, 'on', True) Greenlet.spawn(b.set_light, name, 'bri', int(brightness)) elif device_type == "spark": # url = SPARK_API #urllib.urlopen(SPARK_API + device_id + "/setbrightness " + brightness) payload = { 'access_token' : spark_token, 'args' : brightness } device_path = "devices/" + device_ID + "/setbrightness" url = urlparse.urljoin(SPARK_API, device_path) try: data = urllib.urlencode(payload) req = urllib2.Request(url, data) response = urllib2.urlopen(req) spark_response = response.read() except urllib2.HTTPError, httperror: raise SparkError(httperror) d = json.loads(spark_response) if d['return_value'] is not 1: #raise SparkError(spark_response) print "error"
def setBrightness(): #MANDATORY FIELDS FROM REQUEST #DEVICE ID AS id #STATE TO ASSIGN TO DEVICE AS state device_id = bottle.request.params.get('id') brightness = bottle.request.params.get('brightness') device_group = bottle.request.params.get('group') if device_group is None: if HomerHelper.idCheck('Devices', device_id): # validate the ID device_function = HomerHelper.getDeviceFunction(device_id) brightness_location = HomerHelper.lookupDeviceAttribute(device_function, 'Brightness') if brightness_location is not None: try: sql_update = "UPDATE `Devices` SET %s " % brightness_location # write it the same column in devices sql_update += "= %s WHERE id = %s" db.query(sql_update, (brightness, device_id)) #con.commit() device_name = HomerHelper.getDeviceName(device_id) device_type = HomerHelper.getDeviceType(device_id) DeviceComunication.sendDeviceBrightness(device_id, device_type, brightness) history_event = "set brightness to: " + brightness HomerHelper.insert_history(device_name, device_id, history_event) d = collections.OrderedDict() d['name'] = device_name d['brightness'] = brightness return json.dumps(d) except MySQLdb.IntegrityError: bottle.abort(400, "Doh! Device doesnt exist") else: bottle.abort(400, "Device does not have brightness attribute") else: bottle.abort(400, "Doh! Device ID was not found") else: if HomerHelper.deviceGroupCheck(device_group): # validate the group try: sql_query = "SELECT `id` FROM Devices WHERE `group` = %s" #get a list of device IDs from the group cur = db.query(sql_query, device_group) row = cur.fetchall() objects_list = [] d = collections.OrderedDict() for device in row: device_id = device['id'] print device_id device_function = HomerHelper.getDeviceFunction(device_id) brightness_location = HomerHelper.lookupDeviceAttribute(device_function, 'Brightness') if brightness_location is not None: try: sql_update = "UPDATE `Devices` SET %s " % brightness_location # write it the same column in devices sql_update += "= %s WHERE id = %s" db.query(sql_update, (brightness, device_id)) device_name = HomerHelper.getDeviceName(device_id) device_type = HomerHelper.getDeviceType(device_id) DeviceComunication.sendDeviceBrightness(device_id, device_type, brightness) history_event = "set brightness to: " + brightness HomerHelper.insert_history(device_name, device_id, history_event) d = collections.OrderedDict() d['name'] = device_name d['brightness'] = brightness objects_list.append(d) print objects_list except MySQLdb.IntegrityError: bottle.abort(400, "Something went horribly wrong, data loaded from DB was bad...uh oh") return json.dumps(objects_list) except MySQLdb.IntegrityError: bottle.abort(400, "No Devices in the group: %s" % device_group)