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 getColor(): device_id = bottle.request.params.get('id') if HomerHelper.idCheck('Devices', device_id): device_function = HomerHelper.getDeviceFunction(device_id) state_location = HomerHelper.lookupDeviceAttribute(device_function, 'State') color_location = HomerHelper.lookupDeviceAttribute(device_function, 'Color') if state_location is not None: if color_location is not None: try: sql_query = "SELECT id, %s, %s FROM Devices " % (state_location, color_location) sql_query += "WHERE id = %s" cur = db.query(sql_query, device_id) row = cur.fetchone() # device IDs unique so just get one record objects_list = [] d = collections.OrderedDict() d['id'] = row['id'] d['mode'] = row[state_location] d['color'] = row[color_location] objects_list.append(d) return json.dumps(objects_list) 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") else: bottle.abort(400, "Doh! Device ID was not found")
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 getPicture(): image_id = bottle.request.params.get('id') if HomerHelper.idCheck('Images', image_id): # images IDs are unique so return only one image try: cur = db.query("SELECT `image` FROM `Images` WHERE id = %s", image_id) row = cur.fetchone() # image IDs unique so just get one record response.content_type = 'image/jpg' return row['image'] except MySQLdb.IntegrityError: bottle.abort(400, "Doh! Device doesnt exist") else: bottle.abort(400, "Doh! Image ID was not found")
def getlocation(): user_id = bottle.request.params.get('id') if HomerHelper.idCheck('Users', user_id): try: cur = db.query("SELECT `location` FROM `Users` WHERE id = %s", user_id) row = cur.fetchone() # User IDs unique so just get one record user_location = 'location', row['location'] return json.dumps(user_location) except MySQLdb.IntegrityError: bottle.abort(400, "Doh! User doesnt exist") else: bottle.abort(400, "Doh! User ID was not found")
def removeUser(): user_id = bottle.request.forms.get('id') if HomerHelper.idCheck('Users', user_id): #validate the device ID user_name = HomerHelper.getUserName(user_id) try: db.query("DELETE FROM Users WHERE id = %s", user_id) #con.commit() HomerHelper.insert_history(user_name, user_id, "user removed") return("OK") except MySQLdb.IntegrityError: bottle.abort(400, "Doh! Unable to remove device. ") else: err_msg = "Doh! That request was no bueno. %s is not a valid ID or it is not enrolled in HOMEr" % user_id bottle.abort(400, err_msg)
def getDevice(): device_id = bottle.request.params.get('id') if HomerHelper.idCheck('Devices', device_id): #validate the device ID sql_query = "SELECT * FROM `Devices` WHERE `id` = %s " cur = db.query(sql_query, device_id) row = cur.fetchone() objects_list = [] # parser for the information returned d = collections.OrderedDict() d['name'] = row["name"] d['type'] = row["type"] d['function'] = row["function"] d['id'] = row["id"] d['location'] = col["location"] objects_list.append(d) return json.dumps(objects_list) 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 getBrightness(): device_id = bottle.request.params.get('id') if HomerHelper.idCheck('Devices', device_id): device_function = HomerHelper.getDeviceFunction(device_id) brightness_location = HomerHelper.lookupDeviceAttribute(device_function, 'Brightness') if brightness_location is not None: #"SELECT `value1` FROM Devices WHERE id = %s" try: sql_query = "SELECT %s FROM Devices " % brightness_location # write it the same column in devices sql_query += "WHERE id = %s" cur = db.query(sql_query, device_id) row = cur.fetchone() # device IDs unique so just get one record device_brightness = 'brightness', row[brightness_location] return json.dumps(device_brightness) 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")
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 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)