Trying to make a raspberry pi control an RGB LED strip.

I'm kinda confuzzled on how to receive the color values from the pi so i can change the LEDs. Am I going in the right direction with this code?

class RGB_Driver(object):
def __init__(self, pwm = None, red_pin = 0, green_pin = 1, blue_pin = 2):
    self.red_pin = red_pin
    self.green_pin = green_pin
    self.blue_pin = blue_pin
    if pwm is None:
        self.pwm = self.setup_pwm()
    else:
        self.pwm = pwm

@staticmethod
def setup_pwm(freq=200):
    pwm = Adafruit_PWM_Servo_Driver.PWM()
    pwm.setPWMFreq(freq)
    return pwm

@staticmethod
def convert_eight_to_twelve_bit(eight_bit):
    """The PWM chip has 10 bit resolution, so we need to 
        convert regular 8 bit rgb codes
    >>> RGB_Driver.convert_eight_to_ten_bit(0)
    0
    >>> RGB_Driver.convert_eight_to_ten_bit(255)
    4080
    >>> RGB_Driver.convert_eight_to_ten_bit(128)
    2048
    """
    return eight_bit<<4


def set_rgb(self, red_value, green_value, blue_value):
    """The rgb values must be between 0 and 4095"""
    #print "R: %d, G: %d, B: %d" % (red_value, green_value, blue_value)
    self.pwm.setPWM(self.red_pin, 0, red_value)
    self.pwm.setPWM(self.green_pin, 0, green_value)
    self.pwm.setPWM(self.blue_pin, 0, blue_value)

@staticmethod
def sanitize_int(x):
    if x<0:
        return 0
    elif x>4095:
        return 4095
    else:
        return int(x)


@staticmethod
def randrange(start, stop, step=1):
    """A slightly modified version of randrange which allows start==stop"""
    if start == stop:
        return start
    else:
        return randrange(start, stop, step) 

def fade_rgb(self, from_red, from_green, from_blue, to_red, to_green, to_blue, steps, delay):
    """Fade from one rgb value to another in steps, waiting for delay ms between each step
        all rgb values must be 10 bit ints (between 0 and 1023)"""
    red_step = float(to_red - from_red)/steps
    green_step = float(to_green - from_green)/steps
    blue_step = float(to_blue - from_blue)/steps

    for step in range(0, steps+1):
        red_value = self.sanitize_int(from_red + red_step*step)
        green_value = self.sanitize_int(from_green + green_step*step)
        blue_value = self.sanitize_int(from_blue + blue_step*step)
        self.set_rgb(red_value, green_value, blue_value)
        time.sleep(delay)

@staticmethod
def get_next_random_value(current_value, minimum_allowed, maximum_allowed, max_walk):
    """Generate the next random value, given the current, max, and min values of that channel
        as well as the maximum change (walk) allowed"""
    min = current_value - max_walk
    if min<minimum_allowed:
        min = minimum_allowed
    elif min<0:
        min = 0

    max = current_value + max_walk
    if max>maximum_allowed:
        max = maximum_allowed
    elif max>4095:
        max=4095

    return RGB_Driver.randrange(min, max)


def random_walk(self, min_red, min_green, min_blue, max_red, max_green, max_blue, random_time, delay, max_walk):
    begin = time.time()
    red = self.randrange(min_red, max_red)
    green = self.randrange(min_green, max_green)
    blue = self.randrange(min_blue, max_blue)
    self.set_rgb(red, green, blue)
    time.sleep(delay)
    while time.time()-begin<random_time:
        red = self.get_next_random_value(red, min_red, max_red, max_walk)
        green = self.get_next_random_value(green, min_green, max_green, max_walk)
        blue = self.get_next_random_value(blue, min_blue, max_blue, max_walk)
        self.set_rgb(red, green, blue)
        time.sleep(delay)



if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser(description='drive a rgb led strip through a pwm module')

parser.add_argument('-r', '--red', nargs=2, type=int, default=[0, 0], help="The beginning and end values for red in fade mode.  Max and min values for red in random mode.")
parser.add_argument('-g', '--green', nargs=2, type=int, default=[0, 0], help="The beginning and end values for green in fade mode.  Max and min values for green in random mode..")
parser.add_argument('-b', '--blue', nargs=2, type=int, default=[0, 0], help="The beginning and end values for blue in fade mode.  Max and min values for blue in random mode..")
parser.add_argument('-s', '--steps', type=int, default=100, help="Number of steps in the fade.  Not used with --random")
parser.add_argument('-d', '--delay', type=float, default=0.005, help="Number of seconds between the steps or random changes, can be a float")
parser.add_argument('-o', '--turn-off', action='store_true', help="Turn off when the fade or random event is over.")
parser.add_argument('--red-pin', type=int, choices=range(0,16), default=0, help="The red pwm pin")
parser.add_argument('--green-pin', type=int, choices=range(0,16), default=1, help="The green pwm pin")
parser.add_argument('--blue-pin', type=int, choices=range(0,16), default=2, help="The blue pwm pin")
parser.add_argument('--repeat', type=int, default=1, help="Repeat the fade this many times.  Unused with --random.")
parser.add_argument('--reverse', action="store_true", help="Reverse the fade, to return back to the initial state.  Unused with --random.")
parser.add_argument('--random', action="store_true", help="Move around randomly between the max and min values specified with --red --green and --blue.  Use with --time and --max-random-walk")
parser.add_argument('--time', type=int, default=10, help="Used with --random.  Move randomly for this many seconds")
parser.add_argument('--max-random-walk', type=int, default=10, help="The max that each channel will be allowed to change between steps in random mode.") 
args = parser.parse_args()




driver = RGB_Driver(red_pin = args.red_pin, green_pin = args.green_pin, blue_pin = args.blue_pin)
try:
    if args.random is False:
        for repeat in xrange(0, args.repeat):
            print "Repetition %d" % repeat
            driver.fade_rgb(args.red[0], args.green[0], args.blue[0], args.red[1], args.green[1], args.blue[1], args.steps, args.delay)
            if args.reverse:
                driver.fade_rgb(args.red[1], args.green[1], args.blue[1], args.red[0], args.green[0], args.blue[0], args.steps, args.delay)
    else:
        # We need to sort the values to make sure randrange works correctly
        args.red.sort()
        args.green.sort()
        args.blue.sort()
        driver.random_walk(args.red[0], args.green[0], args.blue[0], args.red[1], args.green[1], args.blue[1], args.time, args.delay, args.max_random_walk)
finally:
    if args.turn_off:
        driver.set_rgb(0, 0, 0)

server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)

port = server_sock.getsockname()[1]

uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"

advertise_service( server_sock, "LEDDriverControl",
               service_id = uuid,
               service_classes = [ uuid, SERIAL_PORT_CLASS ],
               profiles = [ SERIAL_PORT_PROFILE ], 
#                   protocols = [ OBEX_UUID ] 
                )

while True:          
print "Waiting for connection on RFCOMM channel %d" % port

client_sock, client_info = server_sock.accept()
print "Accepted connection from ", client_info

try:
        data = client_sock.recv(1024)
        if len(data) == 0: break
        print "received [%s]" % data

    if data == 'led_off':
            self.set_rgb(0, 0, 0);


    else:
        self.set_rgb(data);
/r/raspberry_pi Thread