Local daemon with HTTP API
A downside of using photons from the commandline is the time it takes to start up photons and discover devices. One way to get around this is to make a script or server that has a long life and knows where the devices are.
Instead of someone building their own, Photons comes with a server that can be used for this purpose.
To install and use:
$ pip install lifx-photons-interactor
$ lifx lan:interactor
The documentation on targets can be read to
understand if it’s desirable to use a different target than the default lan
target.
There is also a Docker image that can be used to start the server.
And also you can load using Home Assistant to run Photons interactor.
The server currently supports:
Getting help information about commands it supports
Applying a theme
Getting serials and information from the network
Starting, stopping and querying firmware effects on devices
Toggling power
Querying devices for information
Setting attributes on devices
Capturing, changing and applying scenes on devices
Transforming the devices in a similar way to the LIFX HTTP API.
Controlling tile animations
Each command comes with the ability to target specific devices.
This server was originally a
separate application
and was placed alongside the rest of the Photons codebase as part of the
0.30.0
release.
Running commands is done with the following PUT command:
curl -XPUT http://127.0.0.1:6100/v1/lifx/command \
-HContent-Type:application/json \
-d '{"command": "transform", "args": {"transform": {"power": "on"}}}'
This handy script can make it easier to make these requests:
$ ./command query '{"pkt_type": "GetColor"}'
{
"results": {
"d073d5001337": {
"payload": {
"brightness": 1.0,
"hue": 0.0,
"kelvin": 3500,
"label": "",
"power": 65535,
"saturation": 0.0
},
"pkt_name": "LightState",
"pkt_type": 107
}
}
}
Available commands
To get information about what specific commands are available, run:
curl -XPUT http://127.0.0.1:6100/v1/lifx/command \
-HContent-Type:application/json \
-d '{"command": "help"}'
And help for specific commands:
curl -XPUT http://127.0.0.1:6100/v1/lifx/command \
-HContent-Type:application/json \
-d '{"command": "help", "args": {"command": "transform"}}'
How accurate is discovery information?
There is no way to subscribe to changes from the lights and so the only way to know if a light has changed is to reach out to it.
The server used to do this very often but it causes a lot of CPU usage when you have a lot of lights (the protocol code in Photons needs to be made more efficient).
Since 0.10.0 the default is much less often. When you perform a discovery
command you will get the cache of information known by the server and this may
be out of date.
You can specify {"matcher": {"refresh_info": true}}
when you run the request
to ensure the cache is accurate when you make that request.
You can also change how often the server refreshes information using the
daemon_options
section of the configuration.
Running on a raspberry Pi
Note that whilst you can run the interactor on an rPi and most commands will be super quick, some commands will not be. The way Photons creates messages is noticeably slow on an rPi for multizone and matrix devices as those messages are quite large. This may improve in the future, but for now applying a theme or scene to such devices may take a few seconds instead of instant. This problem does not exist on a more powerful computer.