Control LIFX bulbs via a remote control (or anything else) that presents itself as a keyboard. Ideally use a remote control that sends a single, distinct keypress per button.
Linux, python >= 3.5, python-evdev, aiolifx, pyyaml.
lifx_remote.py <path to config>
A unit file has also been provided for you to modify if you like that kind of thing.
You will need permission to access the device you wish to use, which usually is only allowed by root. Configuring this is outside of the scope of this document.
Configuration is all in YAML, and consists of two parts. Firstly, and most simply, the device name:
device_name: Some Device HereThis configures the device to use for input. Run evtest to get a list of
available devices, or look in dmesg. The script will grab every device with
this name (in my case, two keyboards and a mouse) and have exclusive access to
their input (so your login prompt/desktop session won't be spammed with
keypresses).
Secondly, the list of keypress → action mappings. Each keypress can trigger as many actions as you wish, with as many combinations of bulbs as you want. The basic structure is:
mappings:
KEY_NAME:
- bulbs: <bulb config>
action: <action config
- <additional steps>The KEY_NAME can be obtained by running evtest and pressing relevant
buttons.
Both bulbs and action can be omitted. If bulbs is omitted, the previously
used bulbs will be controlled, whilst if action is ommitted, no action will
take place but the currently controlled bulbs will change.
bulbs configuration takes the following form:
names:
- Bulb 1
- Bulb 2
group: Group Name
location: Location Name
exclude:
- Not This OneAny combination of the above can be used and will select all matching bulbs
(except those that have been specifically excluded). If a bulb is covered
by more than one of names, group, or location, it will still only have
operations applied to it once.
action configuration is as follows:
brightness: (+|-|0-65535)
hue: (+|-|0-65535)
saturation: (+|-|0-65535)
kelvin: (+|-|2500-9000)
power: (toggle|0|1)Any combination of the above can be specified. Note that, due to YAML's
form, - has to be put in quotes.