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 addUser(): user_name = bottle.request.forms.get('name') user_id = bottle.request.forms.get('id') if re.match(r"\w+$", user_name) is not None: # check that the device name is alphanumeric if re.match(r"[a-zA-Z0-9]{0,128}$", user_id) is not None: # check that id only has letters & numbers try: sql_insert = "INSERT INTO `Users`(`name`, `id`) VALUES (%s,%s)" db.query(sql_insert, (user_name, user_id)) HomerHelper.insert_history(user_name, user_id, "device added") cur = db.query("SELECT * FROM Users WHERE id = %s", user_id) row = cur.fetchone() objects_list = [] d = collections.OrderedDict() d['name'] = row["name"] d['id'] = row["id"] objects_list.append(d) return json.dumps(objects_list) except MySQLdb.IntegrityError: bottle.abort(400, "Doh! Device exsists") else: bottle.abort(400, "Doh! That request was no bueno. The id is invalid.") else: bottle.abort(400, "Doh! That request was no bueno. The name is invalid")
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 addDevice(): device_name = bottle.request.forms.get('name') device_type = bottle.request.forms.get('type') device_function = bottle.request.forms.get('function') device_id = bottle.request.forms.get('id') device_location = bottle.request.forms.get('location') if device_name is not None: # check that the device name is present if re.match(r"\w+$", device_type) is not None: # check that device type is alphanumeric #if re.match(r"[a-zA-Z0-9]{0,128}$", device_id) is not None: # check that id only has letters and numbers if HomerHelper.deviceIdCheck(device_id) is False: # check that id only has letters and numbers if HomerHelper.roomCheck(device_location): try: sql_insert = "INSERT INTO `Devices`(`name`, `type`, `function`, `id`, `location`) VALUES (%s, %s,%s,%s,%s)" db.query(sql_insert, (device_name, device_type, device_function, device_id, device_location)) HomerHelper.insert_history(device_name, device_id, "device added") except MySQLdb.IntegrityError: bottle.abort(400, "Doh! Device exsists") try: cur = db.query("SELECT * FROM Devices WHERE id = %s", device_id) rows = cur.fetchall() objects_list = [] for row in rows: d = collections.OrderedDict() d['name'] = row["name"] d['type'] = row["type"] d['function'] = row["function"] d['id'] = row["id"] d['location'] = row["location"] objects_list.append(d) return json.dumps(objects_list) except MySQLdb.IntegrityError: bottle.abort(400, "Doh! Adding user failed") else: bottle.abort(400, "Doh! That request was no bueno. The room is invalid.") else: bottle.abort(400, "Doh! That request was no bueno. The id is invalid." + device_id) else: bottle.abort(400,"Doh! That request was no bueno. The type is invalid") else: bottle.abort(400, "Doh! That request was no bueno. The name is invalid")
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 setLocation(): user_id = bottle.request.params.get('id') user_location = bottle.request.params.get('location') if HomerHelper.userIdCheck(user_id): user_name = HomerHelper.getUserName(user_id) try: sql_update = "UPDATE `Users` SET `Location`= %s WHERE ID = %s" db.query(sql_update, (user_location, user_id)) history_event = "set user location to: " + user_location HomerHelper.insert_history(user_name, user_id, history_event) return "OK" except MySQLdb.IntegrityError: bottle.abort(400, "Doh! User doesn't exist") else: bottle.abort(400, "Doh! User ID was not found")
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 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)