Interacting with LIFX devices

To interact with a LIFX device, you send it packets and potentially receive replies that you can look at. To do this you need a target object, some packets, or message objects to send; and a reference that says what devices on your network to send to.

Photons comes with one target type, which is the LanTarget. This knows how to send packets using UDP over the LAN. You can see how to get access to one of these in the scripts section.

Once you have a target, you create a sender object, which is essentially a session. This does discovery for you and holds onto the results of that so you can send packets multiple times in your program and only have to do discovery once. If your script only sends one message, then you can send it directly from the target and it’ll create and cleanup a sender for you.

For example, to tell devices to turn off you can say:

from photons_messages import DeviceMessages

async def my_action(target, reference):
    async with target.session() as sender:
        await sender(DeviceMessages.SetPower(level=0), reference)

    # Or if you don't want to create a sender
    await target.send(DeviceMessages.SetPower(level=0), reference)

A message can be a single packet, a list of those, or a special message object that knows how to send multiple messages.

And a reference can be a single serial (i.e. the string "d073d5001337", a list of those serials or a special reference.

You can read more details about sender and also the higher level Gatherer.