Controlling LIFX Smart Light Bulbs using Python
LIFX smart light bulbs can be controlled entirely on the local wi-fi network without requiring use of any cloud services.
The following Python example uses the LifxLAN module to perform the following actions:
- Scans the local network and lists the names of all of the LIFX bulbs found
- Turns the bulb called “Bedroom” on
- Changes the colour of the bulb to soft white
- Turns the bulb off
from lifxlan import LifxLAN
import time
if __name__ == "__main__":
#Enable us to refer to light objects by name
light_list = dict()
lan = LifxLAN()
#Scan the local network and enumerate the list of available LifX bulbs
for light in lan.get_lights():
if light.is_light():
light_name = str(light.get_label())
light_list[ light_name ] = light
print(f'Found light {light_name}')
#Turn the bedroom light on
light_list["Bedroom"].set_power(1);
time.sleep(3)
#Set the bedroom light to a warm white colour at 50% brightness
#Parameters: hue (range: 0-65535), saturation (range: 0-65535), brightness (range: 0-65535), Kelvin (range: 2500-9000)
light_list["Bedroom"].set_color( (0, 0, 32768, 3200) )
time.sleep(3)
#Turn the bedroom light off
light_list["Bedroom"].set_power(0);
Errors
Note, that at the time of the writing the version of the LifxLAN module in PyPi (1.2.7) seems to have a bug in it. This appears to be due to a change in the module “bitstring” which introduced breaking changes in version 4.
This results in the following exception:
bitstring.exceptions.CreationError: Token with length 64 packed with value of length 0.
A solution is to rollback to a version of bitstring that is less than version 4.
pip install bitstring==3.1.9
pip install LifxLAN