From 17f5a466d9df082ab7b7cb0ab2eed114b4fdbe4e Mon Sep 17 00:00:00 2001 From: Tim Date: Sat, 23 Jan 2016 22:14:57 +0000 Subject: [PATCH] Separate LIFX code and HA component --- homeassistant/components/light/lifx.py | 568 ++++--------------------- 1 file changed, 73 insertions(+), 495 deletions(-) diff --git a/homeassistant/components/light/lifx.py b/homeassistant/components/light/lifx.py index c516b273d58..4db691781b0 100644 --- a/homeassistant/components/light/lifx.py +++ b/homeassistant/components/light/lifx.py @@ -1,7 +1,8 @@ + """ homeassistant.components.light.lifx ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -LiFX platform that implements lights +LIFX platform that implements lights Configuration: @@ -12,525 +13,129 @@ light: # only needed if using more than one network interface # (omit if you are unsure) server: 192.168.1.3 - # optional broadcast address, set to reach all LiFX bulbs + # optional broadcast address, set to reach all LIFX bulbs # (omit if you are unsure) broadcast: 192.168.1.255 """ # pylint: disable=missing-docstring +import liffylights import logging -import threading -import time -import queue -import socket -import io -import ipaddress import colorsys -import struct -from struct import pack -from enum import IntEnum from homeassistant.helpers.event import track_time_change from homeassistant.components.light import \ (Light, ATTR_BRIGHTNESS, ATTR_RGB_COLOR, ATTR_COLOR_TEMP) _LOGGER = logging.getLogger(__name__) +REQUIREMENTS = ['liffylights==0.1'] DEPENDENCIES = [] -REQUIREMENTS = [] CONF_SERVER = "server" # server address configuration item CONF_BROADCAST = "broadcast" # broadcast address configuration item -RETRIES = 10 # number of packet send retries -DELAY = 0.05 # delay between retries -UDP_PORT = 56700 # udp port for listening socket -UDP_IP = "0.0.0.0" # address for listening socket -MAX_ACK_AGE = 1 # maximum ACK age in seconds -BUFFERSIZE = 1024 # socket buffer size SHORT_MAX = 65535 # short int maximum BYTE_MAX = 255 # byte maximum -SEQUENCE_BASE = 1 # packet sequence base -SEQUENCE_COUNT = 255 # packet sequence count +TEMP_MIN = 2500 # lifx minimum temperature +TEMP_MAX = 9000 # lifx maximum temperature +TEMP_MIN_HASS = 154 # home assistant minimum temperature +TEMP_MAX_HASS = 500 # home assistant maximum temperature -HUE_MIN = 0 -HUE_MAX = 360 -SATURATION_MIN = 0 -SATURATION_MAX = 255 -BRIGHTNESS_MIN = 0 -BRIGHTNESS_MAX = 65535 -TEMP_MIN = 2500 -TEMP_MAX = 9000 -TEMP_MIN_HASS = 154 -TEMP_MAX_HASS = 500 +class lifx_api(): + def __init__(self, add_devices_callback, + server_addr=None, broadcast_addr=None): + self._devices = [] -class PayloadType(IntEnum): - """ LIFX message payload types. """ - GETSERVICE = 2 - STATESERVICE = 3 - GETHOSTINFO = 12 - STATEHOSTINFO = 13 - GETHOSTFIRMWARE = 14 - STATEHOSTFIRMWARE = 15 - GETWIFIINFO = 16 - STATEWIFIINFO = 17 - GETWIFIFIRMWARE = 18 - STATEWIFIFIRMWARE = 19 - GETPOWER1 = 20 - SETPOWER1 = 21 - STATEPOWER1 = 22 - GETLABEL = 23 - SETLABEL = 24 - STATELABEL = 25 - GETVERSION = 32 - STATEVERSION = 33 - GETINFO = 34 - STATEINFO = 35 - ACKNOWLEDGEMENT = 45 - GETLOCATION = 48 - STATELOCATION = 50 - GETGROUP = 51 - STATEGROUP = 53 - ECHOREQUEST = 58 - ECHORESPONSE = 59 - GET = 101 - SETCOLOR = 102 - STATE = 107 - GETPOWER2 = 116 - SETPOWER2 = 117 - STATEPOWER2 = 118 + self._add_devices_callback = add_devices_callback + self._liffylights = liffylights(self.on_device, + self.on_power, + self.on_color, + server_addr, + broadcast_addr) -class Power(IntEnum): - """ LIFX power settings. """ - BULB_ON = 65535 - BULB_OFF = 0 + def find_bulb(self, ipaddr): + bulb = None + for device in self._devices: + if device.ipaddr == ipaddr: + bulb = device + break + return bulb + def on_device(self, ipaddr, name, power, hue, sat, bri, kel): + bulb = self.find_bulb(ipaddr) -def gen_header(sequence, payloadtype): - """ Create LIFX packet header. """ - protocol = bytearray.fromhex("00 34") - source = bytearray.fromhex("42 52 4b 52") - target = bytearray.fromhex("00 00 00 00 00 00 00 00") - reserved1 = bytearray.fromhex("00 00 00 00 00 00") - sequence = pack("B", 3) - reserved2 = bytearray.fromhex("00 00 00 00 00 00 00 00") - packet_type = pack("