class ChangeLightColor(object): """Change a Philips Hue bulb color.""" def __init__(self, say, bridge_address, bulb_name, hex_color): self.converter = Converter() self.say = say self.hex_color = hex_color self.bulb_name = bulb_name self.bridge_address = bridge_address def run(self): bridge = self.find_bridge() if bridge: light = bridge.get_light_objects("name")[self.bulb_name] light.on = True light.xy = self.converter.hex_to_xy(self.hex_color) self.say(_("Ok")) def find_bridge(self): try: bridge = phue.Bridge(self.bridge_address) bridge.connect() return bridge except phue.PhueRegistrationException: logging.info("hue: No bridge registered, press button on bridge and try again") self.say(_("No bridge registered, press button on bridge and try again"))
def put(self, request): service_ip = socket.gethostbyname(socket.gethostname()) client_ip = self.get_client_ip(request) client_id = request.data.get('client_id', 'Unknown') # Figure out how the color is specified c = Converter() if 'rgb' in request.data: r, g, b = request.data['rgb'] xy = c.rgb_to_xy(r, g, b) elif 'hex' in request.data: xy = c.hex_to_xy(request.data['hex']) hex_color = c.xy_to_hex(*xy) # Log the request if a database is present if settings.DATABASE_FOUND: ce = ChangeEvent(service_ip=service_ip, client_ip=client_ip, client_id=client_id, color=hex_color) ce.save() # There should probably be a throttle in place, but I can control # that elsewhere in the demo if not settings.BRIDGE_MOCK: self.bridge().set_light(settings.BRIDGE_LIGHT, 'xy', xy) return Response()
def activate_goal_light(woohue_config, team): team_colors = [] team_colors.append(team['primary-color']) # Team primary color team_colors.append(team['secondary-color']) # Team secondary color existingState = [] for light in woohue_config.goal_lights: existingState.append( config.Bridge(woohue_config.ip).get_light(light, 'xy')) converter = Converter() for i, item in enumerate(team_colors): xy_color = converter.hex_to_xy(item) team_colors[i] = xy_color c = cycle(team_colors) for i in range(9): team_color = next(c) try: config.Bridge(woohue_config.ip).set_light( woohue_config.goal_lights, 'xy', team_color, transitiontime=0) except Exception as e: print(e) time.sleep(.5) #Restore previous color values for i in range(2): config.Bridge(woohue_config.ip).set_light(woohue_config.goal_lights[i], 'xy', existingState[i])
def get_result_for_lights(seat): converter = Converter() xy_old = converter.hex_to_xy(colors[seat['old_party']]) xy_new = converter.hex_to_xy(colors[seat['new_party']]) comm = {'bri':127, 'transitiontime':20, 'xy':xy_old} b.set_light(LIGHTS, comm) time.sleep(5) comm = {'bri':254, 'transitiontime':20, 'xy':xy_new} b.set_light(LIGHTS, comm) time.sleep(20) state_of_the_parties()
def state_of_the_parties(): global b while(True): page = requests.get(url=home_url,headers=USER_AGENT_HEADER) tree = html.fromstring(page.text) parties = [] parties_tree = tree.xpath(party_order_xpath) #for party in parties_tree: print parties_tree party_seats = tree.xpath(party_seats_xpath) print party_seats results = {} con_idx = parties_tree.index('CON') results['CON'] = float(party_seats[con_idx]) lab_idx = parties_tree.index('LAB') results['LAB'] = float(party_seats[lab_idx]) snp_idx = parties_tree.index('SNP') results['SNP'] = float(party_seats[snp_idx]) total_seats = float(results['CON'] + results['LAB'] + results['SNP']) brightness = {} brightness['CON'] = results['CON']/total_seats brightness['LAB'] = results['LAB']/total_seats brightness['SNP'] = results['SNP']/total_seats converter = Converter() light_count = 0 for party in results: bri = int(brightness[party]*254) xy = converter.hex_to_xy(colors[party.lower()]) comm = {'bri':bri, 'transitiontime':20, 'xy':xy} b.set_light(LIGHTS[light_count], comm) light_count += 1 time.sleep(10)
class Light: def __init__(self, bridge, light_id): self.color_converter = Converter(GamutA) self.speed = 0 self.userid = bridge.userid self.ipaddress = bridge.ipaddress self.light_id = light_id self.bridge = bridge self.strobe = False def get_status(self): return self.bridge.get_state(self.light_id) def on(self): task = {'on': True} self.get_color() self.bridge.set_state(task, self.light_id) def off(self): task = {'on': False} self.bridge.set_state(task, self.light_id) def brightness(self, percent): task = {"bri": percent} self.bridge.set_state(task, self.light_id) def strobe_start(self, colors, speed, is_random): prev_color = '' self.strobe = True self.speed = speed while self.strobe and self.speed < 4.5: if is_random: # Needs to be cleaned up to match non-random new_colors = colors[:] if prev_color != '': new_colors.remove(prev_color) prev_color = random.choice(new_colors) self.color(prev_color) time.sleep(int(self.speed)) else: color_index = 0 while color_index < len(colors) and self.speed < 4.5: self.color(colors[color_index]) prev_speed = self.speed no_itr = self.speed / 0.1 for i in range(int(no_itr)): if prev_speed != self.speed: break time.sleep(0.1) if self.speed == prev_speed: color_index += 1 elif color_index == len(colors) - 1: color_index = 0 def strobe_stop(self): self.strobe = False def strobe_speed(self, speed): self.speed = speed def color(self, color): xy_color = color[1:] # Remove '#' from hex value xy_color = self.color_converter.hex_to_xy(xy_color) try: task = {"xy": xy_color} self.bridge.set_state(task, self.light_id) except KeyError: raise ValueError('Color does not exist') from None def get_color(self): xy_color = self.get_status()['xy'] hex_color = self.color_converter.xy_to_hex(xy_color[0], xy_color[1]) return hex_color
import phue from rgbxy import Converter, GamutC BRIDGE_IP = '192.168.1.56' LIGHTS = ['Hue lightstrip plus 1'] converter = Converter(GamutC) if len(sys.argv) > 1: rgb_hex = sys.argv[1] if not re.compile(r'[a-fA-F0-9]{6}$').match(rgb_hex): raise ValueError('Argument must be a valid hex color') xy = converter.hex_to_xy(sys.argv[1]) else: colors_file_path = os.path.expanduser('~/.cache/wal/colors.json') if not os.path.isfile(colors_file_path): print('colors.json not found in pywal cache directory', file=sys.stderr) sys.exit(1) file = open(colors_file_path, 'r') colors = json.load(file) rgb_hex = colors['special']['background'][1:] xy = converter.hex_to_xy(rgb_hex) try: bridge = phue.Bridge(BRIDGE_IP) except: print(
import time disco_mode = False try: b = Bridge('192.168.1.123') b.connect() light_names = b.get_light_objects('name') lights = [light_names['Lounge Lamp'], light_names['Lounge Main']] converter = Converter() colours = [ converter.hex_to_xy('FF0000'), converter.hex_to_xy('00FF00'), converter.hex_to_xy('0000FF'), converter.hex_to_xy('FF00FF') ] print("Connected to hue bridge") except PhueRegistrationException: print("No bridge registered, press button on bridge and try again") exit(1) def on_connect(client, userdata, flags, rc): topic = "house/livingroom/disco" client.subscribe(topic) print("Subscribed to " + str(topic))
def convert_temp_to_colour(temp): temp_threshold = find_temp_threshold(temp) converter = Converter(GamutA) colour = converter.hex_to_xy(lookup_colour(temp_threshold)) return colour
def convert_hex_to_xy(self, color): converter = Converter(GamutC) color = color[1:len(color) - 2] xy = converter.hex_to_xy(color) return xy