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 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 #3
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 #4
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")
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"
Example #6
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)