Example #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
Example #2
0
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")
Example #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")
Example #4
0
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")
Example #5
0
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")
Example #6
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)
Example #7
0
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")
Example #8
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
Example #9
0
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")
Example #10
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")
Example #11
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)