示例#1
0
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
示例#2
0
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")
示例#3
0
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")
示例#4
0
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")
示例#5
0
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)
示例#6
0
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")
示例#7
0
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
示例#8
0
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")
示例#9
0
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)